有没有办法从依赖注入器获取类的实例?
例如,我注册了我的类型,然后有一个这样的类:
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,然后将其注入到 B 类构造函数中。我只是好奇是否有办法从 Unity 中获取为我创建的 A 实例,并自动注入迂腐,这样我就不必注册它或通过对象。
请记住,这不是我正在考虑的实际用例,但我想详细了解我的依赖注入和 Unity 选项。
在 Unity 中,有几种方法可以获取依赖项。
- 构造函数注入
- 属性注入
- 手动解析
我相信你要求的是#3。
在您的示例中,您可以通过以下方式获取 A 类实例(前提是您已经注册了 Iinterface):
unityContainer.Resolve<A>();
考虑 Unity 的一种简化方法是,它是一个非常智能的工厂,可以在构造函数、属性中或通过调用方法来为您提供对象。 询问任何对象类型或接口类型,它会给你一个。 需要注意的是,您需要为它提供有关如何处理歧义的线索。 这基本上就是注册发挥作用的地方。
在上面的示例中,唯一的歧义是Iinterface
因此这是您需要注册的唯一类。 解析类A
或B
不需要任何注册,因为它已经是一个具体类型。
A
和B
之间的关系:
如果B
依赖于A
,那么A
将依赖注入B
(或者注入A
本身)是有意义的。
我不建议允许B
通过查看A
来"找到"依赖项。 充其量,您在B
和A
之间有很强的依赖性,在最坏的情况下,您最终会得到"服务定位器"反模式。
除非您迫切需要在A
和B
之间保持依赖关系相同,否则我不会将它们结合起来。