c# - 向 dotnet core 3 注册 Open Generic
问题描述
我正在尝试在我的应用程序中注册一个 Open Generic 类型,但我的行为很奇怪。
以下工作正常:
services.AddTransient(typeof(IA<>), typeof(A<>));
现在,我想将参数传递给我的A
类,因为我的构造函数有一些参数:
services.AddTransient(typeof(IA<>), provider =>
{
return ActivatorUtilities.CreateInstance(provider, typeof(A<>), "1", "2");
});
这会产生异常
'开放通用服务类型 'IA`1[T]' 需要注册开放通用实现类型。(参数'描述符')'
好的,所以我简化了我的工厂,只是做了这样的事情:
services.AddTransient(typeof(IA<>), provider => typeof(A<>));
但这会产生完全相同的异常。
问题很简单:如何使用默认的 .net core DI 注册带有参数的 Open Generic?(我不想使用像 Castle Windsor 这样的第三方库)
请注意,构造函数A<>
具有可选参数,这就是services.AddTransient(typeof(IA<>), typeof(A<>));
工作的原因
解决方案
您可以将参数的构造函数包装A<>
到一个类中并注入它而不是传递参数
services.AddTransient(typeof(IA<>), typeof(A<>));
services.AddTransient<AOptions>(sp => new AOptions { X = "1", Y = "2" });
public class A<T> : IA<T>
{
private readonly AOptions _aOptions;
public A(AOptions aOptions = null)
{
_aOptions = aOptions;
}
}
public class AOptions
{
public string X { get; set; }
public string Y { get; set; }
}
推荐阅读
- python - 杀死运行多处理操作的子线程
- python - 使用转换库在 python 中的 FSM 中状态不会改变
- r - 利用逻辑向量中的if else循环来区分R中数值的三种状态
- java - 内容根 一个项目中的两个模块不能共享同一个内容根。IntelliJ 将模块添加到 Java 项目
- powerbi - Azure Blob 中的 Power BI 增量刷新
- java - Android:在枚举类中获取本地资源
- python-3.x - 结合使用 itertools 和 zip 从两个不同长度的列表创建字典时出现问题
- python - Python无法进行矩阵求和
- python-3.x - 如何在 Django 中将测试实例 ID 分开?
- visual-studio-code - 如何在 VS Code 中找到不是 utf8 的 unicode 字符?