子类中的依赖注入

时间:2018-02-20 09:39:32

标签: c# .net dependency-injection

我正在.Net核心中编写一个控制台应用程序。我想使用依赖注入。我的架构是这样的。程序包含一个TradeProcessor(完成所有工作),后者又生成一些CompoundTrades。我有DI通过其构造函数和整个ServiceProvider设置将一些类传递给TradeProcessor。这很好。

现在,如果我想将DI中的一些类转化为CompoundTrade,那么TradeProcessor是否必须通过构造函数传递它们?我的印象是,如果您注册要构建的课程,所有要传入的课程,那么他们都会被传入"引擎盖下#34;。你调用CompoundTrade(),但调用另一个构造函数。我在Asp.Net中与DI混淆了吗?这样做的最佳设计模式是什么?将所有ServiceProviders粘贴在静态类中?

1 个答案:

答案 0 :(得分:1)

  

你调用CompoundTrade(),但调用另一个构造函数。

不依赖注入的工作方式。如果显式调用构造函数,则完全该构造函数。

您需要引用容器并告诉您的容器为您创建该类的实例。

如果您有一个需要动态创建在容器中注册的新对象的实例,则需要传入容器,然后使用它来创建这些新对象。不要直接调用构造函数。

public TradeProcessor(IServiceProvider provider)
{
   // save the provider in a field
}

public void ThisNeedsADynamicallyCreatedContainerObject()
{
    if(condition)
    {
        var instance = this.provider.GetService<ICompoundTrade>();
    }
    else
    {
        var instance = this.provider.GetService<ISingleTrade>();
    }
}

免责声明:实际语法可能因您使用的依赖注入提供程序而异。