Как добавить все зарегистрированные сервисы из Blazor в Simple Injector?

#c# #dependency-injection #blazor #simple-injector

#c# #внедрение зависимостей #blazor #simple-инжектор

Вопрос:

У меня есть приложение blazor на стороне сервера, и я также использую simple injector для других инъекций зависимостей в моем приложении.

Я хочу зарегистрировать все сервисы из blazor в контейнер simple injector, потому что в противном случае мне придется дублировать всю регистрацию сервисов, но также основная проблема заключается в том, что есть некоторые регистрации сервисов, которые я не знаю, как правильно зарегистрировать (обычно происходит из некоторой библиотеки расширений для внедрения зависимостей).

Например, мне нужно что-то вроде

 public void ConfigureServices(IServiceCollection services)
{
    // multiple service registration
    services.RegisterSomeServices();
    // ... 

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

Как я могу получить все зарегистрированные сервисы от blazor и зарегистрироваться в контейнере simple injector?

Комментарии:

1. Есть некоторые обсуждения по интеграции, но на момент написания статьи до сих пор нет официального руководства о том, как правильно интегрировать Simple Injector с компонентами Blazor.

Ответ №1:

После некоторого времени поисков я нашел в документации руководство по интеграции ServiceCollection, которое представляет собой способ интеграции сторонних сервисов в простой инжектор.

Что мне нужно сделать в соответствии с фреймворком перекрестной проводки и сторонними сервисами, так это подключить сервисы blazor к simple injector, поэтому в моем случае мне нужно сделать следующее

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