2

现在在创建时Engine,它需要一个新Compoment的,并将Engine“this”本身传递给Component.

在创建时Component,它需要知道它的父级并通过调用它的函数Engine来与它集成。IntegrateComponent()

这是一种循环引用的情况。我如何在 DI 中做到这一点?(就我而言,温莎城堡)

public class Engine : IEngine {
  private IComponent _someComponent;
  public Engine() {
    _component = new Component(this);
  }
  public void IntegrateComponent() {
    //init component...
  }
}

public class Component : IComponent {
  private readonly IEngine _engine;
  public Component(IEngine engine) {
    _engine = engine;
    _engine.IntegrateComponent();
  }
}

static void Main() {
  var engine = new Engine();
}    

编辑 - - - - - - - - - - - - - - - - - - - -

我想要类似...

Register<IComponent>().ImplementedBy<Component>(); 
Register<IEngine>().ImplementedBy<Engine>(); 
---> Resolve<IEngine>(); ... 

但是我要如何告诉 DI 这个引擎和这个组件相互引用呢?

4

1 回答 1

0

首先,您必须以没有循环引用的方式进行设计。如果没有,使用属性注入,您可以打破这个

var engine = new Engine();
engine.Component = new Component(engine);

这是基于 Mark Seemann 的优秀著作 - .Net 中的依赖注入。

已经有一个线程:看似循环依赖导致Castle Windsor出现问题

于 2012-12-01T06:00:52.443 回答