0

我的 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);
}

当我调试这段代码时,我总是将服务设为空(NavigationManager、CompanyService)。这是我在项目中的文件位置

在此处输入图像描述

谁能帮我解决这个问题?

PS 我也在使用 MatBlazor 作为我的 UI。

谢谢

问候 J

4

2 回答 2

3

这是错误的:

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

显示所有代码...

在任何情况下,在组件的视图部分(Razor 标记)中使用 @inject 指令,或者定义一个使用 Inject 属性注释的属性,例如:

[Inject] Public NavigationManager NavigationManager { get; set; }

希望这可以帮助...

于 2020-04-27T22:05:08.957 回答
1

问题是:

我在构造函数中初始化我的虚拟机,这是错误的

public CompaniesList()
{
    Context = new CompaniesListVm(NavigationManager, CompanyService);
}

改成之后

protected override void OnInitialized()
{
     Context = new CompaniesListVm(NavigationManager, CompanyService);
}

一切正常。

问候

于 2020-04-28T05:45:56.130 回答