连接两个对象的依赖注入

时间:2012-12-01 04:01:24

标签: c# dependency-injection castle-windsor

现在创建Engine时,它需要一个新的Compoment,而Engine将此'传递给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这个引擎&amp;这个组件是否相互引用?

1 个答案:

答案 0 :(得分:0)

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

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

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

这已经有一个主题:Seemingly circular dependencies causing issues with Castle Windsor