2012-12-01 23 views
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這款發動機&這個組件參考對方?

+0

您需要在哪裏DI? (你能舉一個你想要做什麼的例子嗎?) –

回答

0

首先,你必須以這樣的方式,有沒有循環references.If不要設計,使用屬性注入,你可以打破這個

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

這是基於馬克西曼的優秀圖書 - 依賴注入在.Net中。

已有此主題:Seemingly circular dependencies causing issues with Castle Windsor

+0

我不喜歡這裏的屬性注入,因爲它暴露了公共的內部引用。我接受你的回答,因爲來自你的鏈接的帖子回答了我的問題。謝謝。 – Tom