单元 DI 到 Microsoft DI - 条件解析



我正在将我的.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")
)
));

如何使用 DI 执行等效Microsoft? 谢谢。

根据您要执行的操作,请注意以下事项

默认服务容器更换

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

  • 属性注入
  • 基于名称的注入 (强调我的(
  • 子容器
  • 自定义生命周期管理
  • Func<T>对延迟初始化的支持
  • 基于公约的注册

参考默认服务容器替换

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

扩展安装 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")
)
));
})
//...

最新更新