过去,我已将外部配置文件与其他DI框架(如Unity)一起使用,以定义注入接口时要提供的具体类型的映射。
这是将包含具体实现的程序集与使用它们的应用程序的已发布副本完全分离的好方法。允许我只需编辑配置即可加载替代程序集。
我得到的印象这不是Microsoft.Extensions.DependencyInjection的功能,尤其是通过code查看。
我想在我开始在我的ASP.NET核心项目中使用不同的DI提供程序之前,我只是想知道这一点。
答案 0 :(得分:3)
MS DI意味着简单,易于使用,并且可以轻松地用作其他IoC / DI框架插件的基础。
它没有任何自动注册,程序集扫描或装饰/拦截支持。如果您需要此类功能,则应使用第三方容器,例如您已命名的Unity。
Unity已经有Microsoft.Extensions.DependencyInjection
的扩展点,可以找到here on 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();
将方法添加到您的启动类
public void ConfigureContainer(IUnityContainer container) { // Could be used to register more types container.RegisterType<IMyService, MyService>(); }