P粉4968866462023-09-01 10:39:42
您创建了变量:
@emlpoyee
但您正在调用 @Employee
,这将是 null。
尝试切换到您实际放入员工的变量:
@emlpoyee
另外,我认为您拼写了变量错误。也许您的意思是 @employee。
您在这里填充了所有内容:
emlpoyee = await emp.Employee();
因此,从您提供的代码来看,调用 @emlpoyee 是有意义的。
所以将 <div> @Employee ... </div>
改为 <div> @emlpoyee ... </div>
P粉5133162212023-09-01 09:57:36
您的代码没有正确执行服务注入。我向您介绍一种我使用的方法,它可以正确工作,希望对您有用。
首先,您需要为您的服务创建一个接口:
namespace Hydra.Services { public interface IEmployee { Task<EmployeeModel> GetEmployee(); } }
然后,您需要修改您的服务,继承自上述接口,如下所示:
namespace Hydra.Services { public class Employee:IEmployee { public async Task<EmployeeModel> GetEmployee() { // 返回JSON数据 } } }
现在,您应该在Startup.cs
或Program.cs
中注入服务,如下所示:
services.AddScoped<IEmployee,Employee>();
最后,您应该在所需的组件中注入您的服务,如下所示,并轻松使用它:
@page "/" @using Hydra.Services @inherits OwningComponentBase<IEmployee> <div> @company ... </div> <!-- OK,公司详细信息已呈现 --> <div> @Employee ... </div> <!-- System.NullReferenceException: '对象引用未设置为对象的实例。' --> @code { private string company; private EmployeeModel emlpoyee = new EmployeeModel; private IEmployee employeeService => Service; protected override async Task OnInitializedAsync() // 获取公司详细信息 // 这里是问题所在: EmployeeModel emp = new EmployeeModel(); emp.url = "http://google.com"; emlpoyee = await employeeService.GetEmployee(); }
当然,您的代码有很多结构问题,您可能只是想以示例代码的形式指定问题,因此我试图解释使用您自己的代码的工作方法,以便示例对您更具体。