实例化依赖注入类

时间:2014-02-18 22:20:35

标签: c# dependency-injection unity-container

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

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

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的选项。

2 个答案:

答案 0 :(得分:4)

在Unity中,有几种方法可以获得依赖关系。

  1. 构造函数注入
  2. 物业注入
  3. 手动解决
  4. 我相信你所要求的是#3。

    在您的示例中,您可以通过以下方式获取A类实例(已授予您已注册的Iinterface):

    unityContainer.Resolve<A>();
    

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

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

答案 1 :(得分:1)

这取决于AB

之间的关系

如果B取决于A,则A将依赖项注入B(或者可能注入A 本身)。

我不建议B通过查看A来“找到”依赖关系。最好,BA之间存在很强的依赖关系,最糟糕的是,最终会出现“服务定位器”反模式。

除非您迫切需要在AB之间保持相同的依赖性,否则我不会将它们与您的情况相结合。