首页 > 解决方案 > 如何从现有的创建 IServiceCollection?

问题描述

假设我有某种子应用程序,它需要在主应用程序中注册一些服务以及它自己的一些特定服务。我想知道是否有更好/自然的方法来做到这一点(也许是一些扩展方法?)。这就是我所做的:

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

谢谢。

标签: c#asp.net-core

解决方案


您可以使用ConfigureServices方法IWebHostBuilder来注入服务集合。然后该实例将传递给ConfigureServicesStartup 类的方法。而且我认为扩展方法是要走的路。但是,在我看来,将扩展方法重命名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;
}

推荐阅读