过去,我在其他 DI 框架(例如 Unity)中使用外部配置文件来定义注入(inject)接口(interface)时要提供的具体类型的映射。
这是将包含具体实现的程序集与使用它们的应用程序的已发布副本完全分离的好方法。允许我通过编辑配置来加载替代程序集。
我的印象是这不是 Microsoft.Extensions.DependencyInjection 的一个特性,尤其是通过 code 查看.
我想在我开始在我的 ASP.NET Core 项目中使用不同的 DI 提供程序之前,我只是想要第二个意见来确认这一点。
最佳答案
MS DI 旨在简单、易于上手,并且可以轻松用作其他 IoC/DI 框架的基础以插入其中。
它没有任何自动注册、程序集扫描或装饰器/拦截支持。如果您需要此类功能,您应该使用第三方容器,例如您已经命名的 Unity。
Unity 已经有 Microsoft.Extensions.DependencyInjection
的扩展点,可以在 here on GitHub 中找到或 NuGet .
如 GitHub 上所述,您需要做的就是运行
Install-Package Unity.Microsoft.DependencyInjection
安装包,然后将其添加到您的代码中
In the WebHostBuilder add UseUnityServiceProvider(...) method
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseUnityServiceProvider() <------ Add this line .UseStartup<Startup>() .Build();
Add method to your Startup class
public void ConfigureContainer(IUnityContainer container) { // Could be used to register more types container.RegisterType<IMyService, MyService>(); }
关于c# - 我可以将外部配置与 ASP.NET Core 的默认依赖注入(inject)一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50623938/