C# 如何从现有的IServiceCollection创建IServiceCollection?
假设我有一些子应用程序,需要在主应用程序中注册一些服务,再加上它自己的一些特定服务。我想知道是否有更好的/自然的方法来实现这一点(也许有一些扩展方法?)。这就是我所做的:C# 如何从现有的IServiceCollection创建IServiceCollection?,c#,asp.net-core,C#,Asp.net Core,假设我有一些子应用程序,需要在主应用程序中注册一些服务,再加上它自己的一些特定服务。我想知道是否有更好的/自然的方法来实现这一点(也许有一些扩展方法?)。这就是我所做的: public static IServiceCollection ConfigureServices(this IServiceCollection main) { IServiceCollection sub = new ServiceCollection(); foreach (var serv in ma
public static IServiceCollection ConfigureServices(this IServiceCollection main)
{
IServiceCollection sub = new ServiceCollection();
foreach (var serv in main)
{
sub.Add(serv);
}
return sub;
}
谢谢。您可以使用
IWebHostBuilder的ConfigureServices
方法来注入服务集合。然后该实例将被传递到启动类的ConfigureServices
方法。我认为扩展方法是一条出路。但是,在我看来,将扩展方法重命名为AddRange
是有意义的:
WebHost.CreateDefaultBuilder(args)
.ConfigureServices(servicesCollection =>
{
var mainServiceCollection = ...;
servicesCollection.AddRange(mainServiceCollection);
})
.UseStartup<Startup>();
谢谢你的回答。我希望得到类似于var newServices=currentServices.CreateChild()
之类的东西。我已经有了IServiceCollection
实例,我正在迭代它来构建新实例。@dcg哦,找到了,更新了我的答案。我认为在这种情况下,扩展方法是可行的。
public static IServiceCollection AddRange(this IServiceCollection current, IServiceCollection main)
{
if(current == null)
{
throw ArgumentNullException();
}
foreach (var serv in main)
{
current.Add(serv);
}
return current;
}