我最近阅读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