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