Как создать IServiceCollection из существующей? - PullRequest
2 голосов
/ 08 ноября 2019

Допустим, у меня есть какое-то вспомогательное приложение, которому нужны некоторые службы, зарегистрированные в главном приложении, а также некоторые собственные службы. Я хочу знать, есть ли лучший / естественный способ сделать это (возможно, какой-нибудь метод расширения?). Вот что я сделал:

public static IServiceCollection ConfigureServices(this IServiceCollection main)
{
    IServiceCollection sub = new ServiceCollection();
    foreach (var serv in main)
    {
        sub.Add(serv);
    }
    return sub;
}

Спасибо.

1 Ответ

0 голосов
/ 08 ноября 2019

Вы можете использовать ConfigureServices метод IWebHostBuilder для внедрения сбора службы. И тогда этот экземпляр будет передан методу ConfigureServices класса Startup. И я думаю, что метод расширения - это путь. Но, на мой взгляд, переименование метода расширения в AddRange имеет смысл:

WebHost.CreateDefaultBuilder(args)
        .ConfigureServices(servicesCollection =>
         {
             var mainServiceCollection = ...;
             servicesCollection.AddRange(mainServiceCollection);
         })
        .UseStartup<Startup>();

А вот метод расширения, который является слегка измененной вашей версией:

public static IServiceCollection AddRange(this IServiceCollection current, IServiceCollection main)
{
    if(current == null)
    {
        throw ArgumentNullException();
    }

    foreach (var serv in main)
    {
        current.Add(serv);
    }

    return current;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...