c# - 依赖注入:两个服务子类,但如何判断要实例化哪一个
问题描述
我正在使用 .net core 进行依赖注入来实例化类。
class A : InterfaceA { } and class B : InterfaceA { }
启动.cs:
_service.AddTransient(InterfaceA, classA)
_service.AddTransient(InterfaceA, classB)
控制器.cs:
public ConstructorA (InterfaceA service) { }
如何判断它在 ConstructorA 中使用了 classA 还是 classB?
解决方案
我不认为你的代码会起作用。但是你可以像下面这样尝试。
在启动中:
services.AddSingleton<classA>();
services.AddSingleton<classB>();
services.AddTransient<Func<string, InterfaceA>>(serviceProvider => key =>
{
switch (key)
{
case "A":
return serviceProvider.GetService<classA>();
case "B":
return serviceProvider.GetService<classB>();
default:
throw new KeyNotFoundException();
}
});
在调用者方法中:
public class Caller: ICaller
{
private readonly Func<string, InterfaceA> _injector;
public Caller(Func<string, InterfaceA> injector)
{
this._injector = injector;
}
public object Get()
{
return _injector("A").GetData();
}
}
推荐阅读
- java - 如何让我的代码的最后一行打印小数点后 2 位的所有值?
- c++ - 将结构字段的类型扩展为可变参数模板参数
- python - 有没有办法通过 python 和网络浏览器获取 HTML 文本?
- javascript - 渲染后反应从孩子那里获取元素
- r - 将矩阵转换为数据框
- java - 如何在java中使用新值更新字符串?
- api - 如何在 openproject 中使用 API.v3 上的“_links”属性参数进行过滤
- scala - 如何用 reducebykey 替换 distinct()
- python - 使用规范化器在 sklearn 预处理中保留列名
- r - R Shiny 想隐藏 global.R 密码