我正在将.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进行等效操作?谢谢。
答案 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")
)
));
})
//...