【发布时间】:2021-03-25 21:53:52
【问题描述】:
我们可以用不同的变量注入同一个类的多个实例吗?
services.TryAddScoped<ISomeClass>(sp =>
{
return new SomeClass(1);
});
services.TryAddScoped<ISomeClass>(sp =>
{
return new SomeClass(2);
});
然后以某种方式将需要的控制器拉入单独的控制器中。
【问题讨论】:
-
控制器如何知道要拉哪一个?您可以使用
IEnumerable<>将它们全部拉入,然后过滤以获取您想要的,但这并不优雅。 -
感谢@IanMercer。不确定可能是名字还是什么?解决工作,但真实,不优雅。因此希望看到任何更好的选择。
-
如果你使用 Autofac,你可以使用元数据:autofaccn.readthedocs.io/en/latest/advanced/metadata.html 但你的用例是什么,为什么你不能使用接口来实现它?
-
你的意思是多个接口继承自同一个实现类?并在控制器中使用我需要的接口?
-
你能解释一下 SomeClass(1) 和 SomeClass(2) 的区别吗?它们可以是具有额外接口的不同具体实例吗?其他选项:(ii)注入
Func<int,SomeClass>工厂? (iii) 用一个使用GetRequiredService<IEnumerable<ISomeClass>>()的 lambda 注册调用类,然后过滤以获得它需要的类 - 但所有这些都在注册中处理而不更改任何一个类?
标签: c# .net .net-core dependency-injection