用于依赖注入的 Blazor WASM 延迟加载程序集服务注册

Bri*_*ian 8 webassembly blazor blazor-client-side blazor-webassembly

我有一个延迟加载的程序集,其中包含需要使用内置依赖注入实现注册的服务。如何注册这些服务,以便可以通过正常的注入机制将它们作为依赖项注入到延迟加载的程序集包含的组件中。

小智 0

我找到了一个有用的链接。

https://blogs.u2u.be/peter/post/blazor-lazy-loading-and-dependency-injection

为了稍后保存它的本质:

延迟加载和依赖注入

首先创建一个新的库项目(在我的代码中称为 LazyLoaded)。接下来添加一个类 LazyLoadedWeatherForecastService ,它将充当工厂:

public class LazyLoadedWeatherForecastService
{
  private readonly IServiceProvider services;

  public LazyLoadedWeatherForecastService(IServiceProvider services)
  {
    this.services = services;
  }

  public IWeatherForecastService Create()
  {
    HttpClient http = this.services.GetRequiredService<HttpClient>();
    return new WeatherForecastService(http);
  }
}
Run Code Online (Sandbox Code Playgroud)

现在添加对此项目的引用

<ProjectReference Include="..\LazyLoaded\LazyLoaded.csproj" />
Run Code Online (Sandbox Code Playgroud)

替换 Program.cs 中的依赖项

// builder.Services.AddScoped<IWeatherForecastService, WeatherForecastService>();
builder.Services.AddScoped<LazyLoadedWeatherForecastService>();
Run Code Online (Sandbox Code Playgroud)

将 IWeatherForecastService 依赖项替换为工厂类:

@page "/fetchdata"
@inject LazyLoaded.LazyLoadedWeatherForecastService factory
Run Code Online (Sandbox Code Playgroud)

并用它来创建实际的依赖关系

protected override async Task OnInitializedAsync()
{
  forecasts = await factory.Create().GetWeatherForecasts();
}
Run Code Online (Sandbox Code Playgroud)