在MVC中,視圖向控制器發送事件,控制器將這些事件發送給模型。該模型通過控制器將更改發送到視圖。 (這是通過構造函數手動注入依賴關係 - 不使用框架)不可能(導致單元測試代碼更難),所以引入了循環依賴關係。我讀了potential solution,但無法弄清楚如何應用這個。MVC循環和依賴注入
有人能指點我一個解決方案嗎?
在此先感謝。
在MVC中,視圖向控制器發送事件,控制器將這些事件發送給模型。該模型通過控制器將更改發送到視圖。 (這是通過構造函數手動注入依賴關係 - 不使用框架)不可能(導致單元測試代碼更難),所以引入了循環依賴關係。我讀了potential solution,但無法弄清楚如何應用這個。MVC循環和依賴注入
有人能指點我一個解決方案嗎?
在此先感謝。
另一種解決方案是讓您的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。
一個解決方案,你已經找到自己,但你可能還沒注意到:
在MVC中,視圖發送事件控制器和控制器 發送這些事件到模型。該模型通過控制器將更改發送到視圖 。
視圖和模型可以發佈事件(想象觀察者模式)來通知控制器,這意味着您在模型和視圖中都不存在對控制器的依賴關係。