繁体   English   中英

实例化依赖注入类

[英]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中,有几种获取依赖项的方法。

  1. 构造函数注入
  2. 资产注入
  3. 手动解决

我相信您要的是#3。

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

unityContainer.Resolve<A>();

简化思考Unity的方法是,它是一个非常聪明的Factory,可以在构造函数,属性或调用方法中为您提供对象。 询问任何对象类型或接口类型,它将为您提供一个。 需要注意的是,您需要提供有关如何处理歧义的线索。 基本上就是注册起作用的地方。

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

这取决于AB之间的关系:

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

我不建议允许B通过查看A来“找到”依赖关系。 最好情况下,您在BA之间有很强的依赖性,最坏情况下,您将得到“服务定位器”反模式。

除非您迫切需要使AB之间的依赖关系保持一致,否则我将不会像您需要的那样对它们进行更多的耦合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM