c# - 如何从现有的创建 IServiceCollection?
问题描述
假设我有某种子应用程序,它需要在主应用程序中注册一些服务以及它自己的一些特定服务。我想知道是否有更好/自然的方法来做到这一点(也许是一些扩展方法?)。这就是我所做的:
public static IServiceCollection ConfigureServices(this IServiceCollection main)
{
IServiceCollection sub = new ServiceCollection();
foreach (var serv in main)
{
sub.Add(serv);
}
return sub;
}
谢谢。
解决方案
您可以使用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;
}
推荐阅读
- firebase - 导出时,“FirestoreAdminClient.exportDocuments”如何在 Firebase 中的文件夹上创建时间戳?
- html - 当img srcset 未加载时是否有可能,然后回退img src?
- git - 如何将 git fork 的更改合并到我的 repo 的 master 中?
- php - 在 Ubuntu 20.04 上更新 PHP 7.4 不会更新到最新版本
- python - 如何将点击从一个应用程序“镜像”到另一个应用程序?
- jquery-validate - 如何验证组中的单独字段?jQuery 验证
- css - Font Awesome 字体大小不变
- python - python,排序不起作用(随机结果)
- mysql - 从 CSV 中截断,但不从插入中截断
- c++ - 没有/proc/self/exe的Linux上C/C++运行时可执行文件的大小?