[英]Instantiate dependency injected class
有什么办法可以从依赖注入器获取类的实例吗?
例如,我注册我的类型,然后有一个这样的类:
public class A {
private readonly Iinterface _object;
public A (Iinterface object) {
_object = object;
}
//do stuff using _object
}
public class B {
public void DoSomething() {
var instanceOfA = DIContainer.GetInstance(typeof(A));
//do stuff with instanceOfA which has been constructed using DI
}
}
当前,我将必须注册要注入的类A,然后将其注入到类Bs的构造函数中。 我只是很好奇,是否有一种方法可以从Unity获取为我创建的A实例,并自动注入依赖关系,因此我不必注册它或通过对象。
请记住,这不是我正在考虑的实际用例,但是我想详细了解有关依赖项注入和Unity的选项。
在Unity中,有几种获取依赖项的方法。
我相信您要的是#3。
在您的示例中,您可以通过以下方式获取类A实例(已批准您已经注册了Iinterface):
unityContainer.Resolve<A>();
简化思考Unity的方法是,它是一个非常聪明的Factory,可以在构造函数,属性或调用方法中为您提供对象。 询问任何对象类型或接口类型,它将为您提供一个。 需要注意的是,您需要提供有关如何处理歧义的线索。 基本上就是注册起作用的地方。
在上面的示例中,唯一的歧义是Iinterface
因此这是您唯一需要注册的类。 解决类A
或B
不需要任何注册,因为它已经是一个具体类型。
这取决于A
和B
之间的关系:
如果B
依赖于A
,那么A
将依赖项注入B
(或者可能注入A
本身 )是有意义的。
我不建议允许B
通过查看A
来“找到”依赖关系。 最好情况下,您在B
和A
之间有很强的依赖性,最坏情况下,您将得到“服务定位器”反模式。
除非您迫切需要使A
和B
之间的依赖关系保持一致,否则我将不会像您需要的那样对它们进行更多的耦合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.