单位DI转换为Microsoft DI-条件解析

时间:2020-01-31 18:55:38

标签: .net .net-core dependency-injection

我正在将.Net Framework代码转换为.Net Core 3.1。

在以前的代码中,我使用Unity来处理我的DI,现在我正在使用Microsoft的DI工具。

但是,我无法像在Unity中那样模仿如何注入特定的策略模式实现:

 container.RegisterType<IService, ConcreteServiceA>("MyString");

 container.RegisterType<IStrategy, Strategy>(
       new InjectionConstructor(
            new ResolvedArrayParameter<IService>(
                new ResolvedParameter<IService>("MyString")
            )
       ));

如何使用Microsoft DI进行等效操作?谢谢。

1 个答案:

答案 0 :(得分:1)

根据您要执行的操作,请注意以下内容

默认服务容器替换

内置服务容器旨在满足框架和大多数消费者应用程序的需求。我们建议您使用内置容器,除非您需要内置容器不支持的特定功能,例如:

  • 财产注入
  • 基于名称的注入 (重点是我的)
  • 子容器
  • 自定义生命周期管理
  • Func<T>支持延迟初始化
  • 基于公约的注册

参考Default service container replacement

Unity确实有一个extension,可以插入Microsoft DI

安装nuget软件包

Install-Package Unity.Microsoft.DependencyInjection

并使用相关的扩展名。

例如

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .UseUnityServiceProvider()   //<---- Add this line
        .ConfigureContainer<IUnityContainer>( container => {
            container.RegisterType<IService, ConcreteServiceA>("MyString");

            container.RegisterType<IStrategy, Strategy>(
               new InjectionConstructor(
                   new ResolvedArrayParameter<IService>(
                       new ResolvedParameter<IService>("MyString")
                    )
               ));
        })
        //...