实例化依赖注入的类



有没有办法从依赖注入器获取类的实例?

例如,我注册了我的类型,然后有一个这样的类:

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 中,有几种方法可以获取依赖项。

  1. 构造函数注入
  2. 属性注入
  3. 手动解析

我相信你要求的是#3。

在您的示例中,您可以通过以下方式获取 A 类实例(前提是您已经注册了 Iinterface):

unityContainer.Resolve<A>();

考虑 Unity 的一种简化方法是,它是一个非常智能的工厂,可以在构造函数、属性中或通过调用方法来为您提供对象。 询问任何对象类型或接口类型,它会给你一个。 需要注意的是,您需要为它提供有关如何处理歧义的线索。 这基本上就是注册发挥作用的地方。

在上面的示例中,唯一的歧义是Iinterface因此这是您需要注册的唯一类。 解析类AB不需要任何注册,因为它已经是一个具体类型。

这取决于

AB之间的关系:

如果B依赖于A,那么A将依赖注入B(或者注入A本身)是有意义的。

我不建议允许B通过查看A来"找到"依赖项。 充其量,您在BA之间有很强的依赖性,在最坏的情况下,您最终会得到"服务定位器"反模式。

除非您迫切需要在AB之间保持依赖关系相同,否则我不会将它们结合起来。

最新更新