首页 > 解决方案 > 我可以将外部配置与 ASP.NET Core 的默认依赖注入一起使用吗?

问题描述

过去,我使用外部配置文件和其他 DI 框架(例如 Unity)来定义注入接口时要提供的具体类型的映射。

这是将包含具体实现的程序集与使用它们的应用程序的已发布副本完全分离的好方法。允许我通过编辑配置来加载替代程序集。

我的印象是这不是 Microsoft.Extensions.DependencyInjection 的功能,尤其是查看代码

在我开始在我的 ASP.NET Core 项目中使用不同的 DI 提供程序之前,我想我只是想要第二个意见来确认这一点。

标签: c#asp.net-coredependency-injection

解决方案


MS DI 旨在简单,易于上手,并且可以轻松地用作其他 IoC/DI 框架插入它的基础。

它没有任何自动注册、程序集扫描或装饰器/拦截支持。如果您需要此类功能,您应该使用第 3 方容器,例如您已经命名的 Unity。

Unity 已经有扩展点Microsoft.Extensions.DependencyInjection,可以在 GitHubNuGet上找到。

如 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>();
    }
    

推荐阅读