Blazor-依赖注入不起作用

时间:2020-04-27 21:48:43

标签: blazor blazor-server-side matblazor

我的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)。这是我在项目中的文件位置

enter image description here

有人可以帮我吗?

P.S我还在UI上使用MatBlazor。

谢谢

问候 J

2 个答案:

答案 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);
}

一切正常。

致谢