c# - 我可以将外部配置与 ASP.NET Core 的默认依赖注入一起使用吗?
问题描述
过去,我使用外部配置文件和其他 DI 框架(例如 Unity)来定义注入接口时要提供的具体类型的映射。
这是将包含具体实现的程序集与使用它们的应用程序的已发布副本完全分离的好方法。允许我通过编辑配置来加载替代程序集。
我的印象是这不是 Microsoft.Extensions.DependencyInjection 的功能,尤其是查看代码。
在我开始在我的 ASP.NET Core 项目中使用不同的 DI 提供程序之前,我想我只是想要第二个意见来确认这一点。
解决方案
MS DI 旨在简单,易于上手,并且可以轻松地用作其他 IoC/DI 框架插入它的基础。
它没有任何自动注册、程序集扫描或装饰器/拦截支持。如果您需要此类功能,您应该使用第 3 方容器,例如您已经命名的 Unity。
Unity 已经有扩展点Microsoft.Extensions.DependencyInjection
,可以在 GitHub或NuGet上找到。
如 GitHub 上所述,您需要做的就是运行
Install-Package Unity.Microsoft.DependencyInjection
安装软件包,然后将其添加到您的代码中
在 WebHostBuilder 添加 UseUnityServiceProvider(...) 方法
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseUnityServiceProvider() <------ Add this line .UseStartup<Startup>() .Build();
将方法添加到您的 Startup 类
public void ConfigureContainer(IUnityContainer container) { // Could be used to register more types container.RegisterType<IMyService, MyService>(); }
推荐阅读
- string - 无法从 $PSVersionTable 中提取 PSVersion 字符串
- bash - ansible - 从文件访问本地环境变量源
- google-sheets-formula - 如何计算折旧资产的现值?
- python - vscode中的Python:导入错误不会显示在终端中
- c++ - std::cout 如何将数值类型转换为以 10 为底?
- ios - 如何限制 Firebase 仅访问一个 iOS 应用
- javascript - querySelectorAll() 定位 rel="me" 属性和包含“12345”的 href 属性
- android - 模拟器:系统 UI 没有响应,可怕的应用程序故障
- sql - SQL - 将 yyyy-MM-ddThh:mm:ssZ 转换为没有时间的简单日期
- python - 如何使用谷歌云平台 TPU v3?