如何将 Blazor 中的所有注册服务添加到 Simple Injector?

Posted

技术标签:

【中文标题】如何将 Blazor 中的所有注册服务添加到 Simple Injector?【英文标题】:How to add all registered services from Blazor to Simple Injector? 【发布时间】:2020-12-14 13:48:33 【问题描述】:

我有一个服务器端 blazor 应用程序,我还在我的应用程序中使用 simple injector 进行其他依赖注入。

我想将所有服务从 blazor 注册到简单的注入器容器,否则我将不得不复制所有服务注册,但主要问题是有一些服务注册我不知道什么是正确的注册方式(通常来自一些依赖注入扩展库)。

例如,我需要类似的东西

public void ConfigureServices(IServiceCollection services)

    // multiple service registration
    services.RegisterSomeServices();
    // ... 

    // some how register all services into simple injector container
    container.SomeHowRegisterServices();

如何从 blazor 获取所有已注册的服务并在简单的注入器容器中注册?

【问题讨论】:

关于集成有some discussions,但在撰写本文时,仍然没有关于如何正确集成 Simple Injector 与 Blazor 组件的官方指导。 【参考方案1】:

经过一段时间的搜索,我在文档中找到了ServiceCollection Integration Guide,这是一种将第三方服务集成到 Simple Injector 中的方法。

根据Cross wiring framework and third-party services,我需要做的是将跨线 blazor 服务转换为简单的注入器,所以对于我来说,我需要做的是

public void ConfigureServices(IServiceCollection services)

    // multiple service registration
    services.RegisterSomeServices();
    // ... 

    // some how register all services into simple injector container
    IServiceProvider provider = services
        .AddSimpleInjector(simpleInjectorContainer)
        .BuildServiceProvider(validateScopes: true);

    // Ensures framework components are cross wired.
    provider.UseSimpleInjector(simpleInjectorContainer);

【讨论】:

以上是关于如何将 Blazor 中的所有注册服务添加到 Simple Injector?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Blazor 中的另一个组件重新渲染一个组件?

身份剃须刀页面中的 Blazor 组件

如何向服务器端 Blazor 项目添加控制器(而非视图)支持

将服务器端 Blazor 添加到现有 MVC Core 应用程序

除了 dbContext 之外,如何向 Blazor 中的服务添加参数?

如何通过 IdentityServer4 将 OpenId Connect 添加到 ASP.NET Core 服务器端 Blazor Web 应用程序?