我最近閱讀Phil Haack's post,他給出了一個實現用於ASP.NET的Model View Presenter的示例。其中一個代碼片段顯示了視圖類的代碼。在ASP.NET MVP應用程序中注入Presenter中的較低層依賴關係
public partial class _Default : System.Web.UI.Page, IPostEditView
{
PostEditController controller;
public _Default()
{
this.controller = new PostEditController(this, new BlogDataService());
}
}
但是,這裏視圖構造了BlogDataService的實例並將其傳遞給演示者。理想情況下,視圖不應該瞭解BlogDataService或任何演示者的較低層依賴關係。但我也更願意將BlogDataService作爲構造函數注入演示者的依賴項,因爲它使演示者的依賴性顯式化。
在stackoverflow上發送同樣的問題here。
其中一個答案建議使用服務定位器來獲取BlogDataService的實例並將其傳遞給演示者的構造函數。但是,此解決方案不能解決視圖瞭解BlogDataService並需要顯式獲取參考它。
有沒有辦法使用IoC或DI容器工具自動構造演示者對象,以便視圖不必處理顯式創建BlogDataService對象並將視圖和服務實例注入演示者的構造函數中。儘可能使用構造函數注入模式。
還是有更好的設計可用來解決問題?有沒有更好的方法來實現這個如果我正在構建一個WinForms應用程序而不是ASP.NET WebForms應用程序?
感謝您的任何反饋意見。
@eptika - 感謝您的答覆。這比構建服務對象並將其傳遞給演示者的視圖更好。 – Scott 2010-01-30 17:37:15
WinForms應用程序的設計會改變嗎?在WinForms應用程序中,首先創建視圖,然後創建WebForms中的演示者,還是以其他方式? – Scott 2010-01-30 18:12:34