有没有办法从依赖注入器中获取类的实例?
例如,我注册了我的类型,然后有一个这样的类:
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的选项。
答案 0 :(得分:4)
在Unity中,有几种方法可以获得依赖关系。
我相信你所要求的是#3。
在您的示例中,您可以通过以下方式获取A类实例(已授予您已注册的Iinterface):
unityContainer.Resolve<A>();
想到Unity的简单方法是它是一个非常智能的工厂,可以在构造函数,属性或调用方法中为您提供对象。询问任何对象类型或接口类型,它会给你一个。需要注意的是,您需要提供有关如何处理歧义的线索。这基本上是注册发挥作用的地方。
在上面的示例中,唯一的歧义是Iinterface
,因此这是您需要注册的唯一类。解析班级A
或B
不需要任何注册,因为它已经是具体类型。
答案 1 :(得分:1)
这取决于A
和B
:
如果B
取决于A
,则A
将依赖项注入B
(或者可能注入A
本身)。
我不建议B
通过查看A
来“找到”依赖关系。最好,B
和A
之间存在很强的依赖关系,最糟糕的是,最终会出现“服务定位器”反模式。
除非您迫切需要在A
和B
之间保持相同的依赖性,否则我不会将它们与您的情况相结合。