2012-07-20 74 views
2

MVC中,視圖向控制器發送事件,控制器將這些事件發送給模型。該模型通過控制器將更改發送到視圖。 (這是通過構造函數手動注入依賴關係 - 不使用框架)不可能(導致單元測試代碼更難),所以引入了循環依賴關係。我讀了potential solution,但無法弄清楚如何應用這個。MVC循環和依賴注入

有人能指點我一個解決方案嗎?

在此先感謝。

回答

2

另一種解決方案是讓您的IoC容器爲您創建工廠,然後注入這些工廠,並使用示例MVP實現來查看此類似問題。具體視圖需要演示者,但演示者需要一個IView(抽象)。它更像循環引用而不是依賴。

public interface IView 
{ 
    string Name { get; set; } 
} 

public interface IPresenterFactory<TController> 
{ 
    TController Create<TView>(TView view); 
} 

public class ConcreteView : IView 
{ 
    private Presenter _Presenter; 
    public ConcreteView(IPresenterFactory<Presenter> presenter) 
    { 
     this._Presenter = presenter.Create(this); 
    } 
} 

public class Presenter 
{ 
     public Presenter(IView view) 
     { 
     this._View = view; 
     } 
} 

演示工廠可以很容易地使用和包裝您的IoC容器,然後根據需要生成您的工廠。單元測試也很容易,因爲您可以非常輕鬆地創建一個IPresenterFactory模擬並構建您需要的Presenter或Controller。

1

一個解決方案,你已經找到自己,但你可能還沒注意到:

在MVC中,視圖發送事件控制器和控制器 發送這些事件到模型。該模型通過控制器將更改發送到視圖 。

視圖和模型可以發佈事件(想象觀察者模式)來通知控制器,這意味着您在模型和視圖中都不存在對控制器的依賴關係。