现在创建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;这个组件是否相互引用?
答案 0 :(得分:0)
首先,你必须设计成没有循环引用的方式。如果没有,使用属性注入,你可以打破这个
var engine = new Engine();
engine.Component = new Component(engine);
这是基于Mark Seemann的优秀书籍 - .Net中的依赖注入。
这已经有一个主题:Seemingly circular dependencies causing issues with Castle Windsor