2011-10-10 21 views
1

我知道在這裏討論了依賴注入與棱鏡/統一關係的循環依賴問題。C#在Ctor中的循環依賴關係Cors注入

但我仍然不明白。假設以下類:

class Feeder : IFeeder { 
    IManager _MM, 
    Feeder(IManager MM) 
    { 
    this._MM = MM; 
    } 
    public void Start() 
    { 
    ... 
    } 
    public void Stop() 
    { 
    ... 
    } 
    private Propagate() 
    { 
    _MM.ConsumeFeed() 
    } 
}; 

class FeedManager : IManager 
{ 
    IFeeder _Feeder; 
    FeedManager(IFeeder Feeder) 
    { 
     this._Feeder = Feeder; 
    } 
    public ConsumeFeed() 
    { 
    ... 
    } 
    private Shutdown() 
    { 
     _Feeder.Stop(); 
    } 
    private StartUp() 
    { 
     _Feeder.Start(); 
    } 
}; 

這顯然是一個圓形的dependcy,因爲饋線取決於FeedManager和副verca。我沒有看到明確的方法來解決這個問題,因爲它似乎是一個非常自然的設計。

當你按照這link有一個提示來提取一些方法,但我仍然沒有看到我如何去耦這些對象。 我讀了關於依賴倒置,觀察者模式,共享對象,事件等內容。 對我來說,這似乎都是爲了達到兩個對象之間的簡單實用而矯枉過正。

解決此問題的唯一方法是使用應用程序或共享對象中的一百萬個事件嗎? 感謝您的幫助,Juergen

回答

2

我會使IFeeder.Propagate方法成爲IManager實例註冊的事件。這樣你就沒有循環引用。

你的例子在這裏與團結無關。從我的角度來看,這不僅僅是一個統一問題,更是一個設計問題。

+0

是的,它的設計問題。事情是,這個統一使用Ctor注射劑和它的易用性來通過推進注射(延遲實例化機制)來克服這一點。所以一般來說,要避免這是使用事件。但正如我所說,我想避免在應用程序中有一百萬個事件。 – Juergen

+1

爲什麼你想避免事件?從我的觀點來看,沒有理由避免發生事件。 – PVitt

+0

假設FeedManager也引發了Feeder應該消耗的事件。然後再次有循環依賴。在這種情況下,eventaggregator會成爲解決方案嗎? – Juergen