我的Blazor项目中有一个非常奇怪的问题。我正在使用依赖注入来使用我的“ CompanyService”服务。这是我注册服务的方式
// Servies Injection
services.AddSingleton<UserService, UserService>();
services.AddSingleton<CompanyService, CompanyService>();
我正在将该服务注入我的剃须刀组件中
@inject CompanyService CompanyService
@inject NavigationManager NavigationManager
我需要将这些服务传递给我的ViewModel,我正在这样做(CompanesList是我的Razor组件名称,所以它是构造函数)
public CompaniesList()
{
Context = new CompaniesListVm(NavigationManager, CompanyService);
}
当我调试此代码时,我总是将服务获取为null(NavigationManager,CompanyService)。这是我在项目中的文件位置
有人可以帮我吗?
P.S我还在UI上使用MatBlazor。
谢谢
问候 J
答案 0 :(得分:2)
这是错误的:
services.AddSingleton<UserService, UserService>();
services.AddSingleton<CompanyService, CompanyService>();
应该是:
services.AddSingleton<IUserService, UserService>();
services.AddSingleton<ICompanyService, CompanyService>();
但是,如果您未定义接口,则应为:
services.AddSingleton<UserService>();
services.AddSingleton<CompanyService>();
您在哪里做
public CompaniesList()
{
Context = new CompaniesListVm(NavigationManager, CompanyService);
}
显示所有代码...
在任何情况下,请在组件的视图部分(剃刀标记)中使用@inject指令,或定义带有Inject属性注释的属性,例如:
[Inject] Public NavigationManager NavigationManager { get; set; }
希望这对您有帮助...
答案 1 :(得分:0)
问题是:
我正在用构造函数初始化我的VM,这是错误的
public CompaniesList()
{
Context = new CompaniesListVm(NavigationManager, CompanyService);
}
更改为
后protected override void OnInitialized()
{
Context = new CompaniesListVm(NavigationManager, CompanyService);
}
一切正常。
致谢