我已经成功迁移了WinForms应用程序以在不久的Autofac使用Autofac 。 我想要一种具有以下动机的设计。
例如,在ASP.NET MVC应用程序的情况下,找到类似于Web请求的合适范围
尽可能抽象以避免服务定位器模式
我想出一个选择Form作为范围的方法,例如,如果我注入一个视图模型或一个存储库,则当表单关闭时应该将其丢弃,等等。这样,我可以在Form使用构造函数注入就像在Web应用程序中的Controller中一样。 例如
public class UserEditForm : Form {
private reaodnly UserEditViewModel viewModel;
public UserEditForm(UserEditViewModel viewModel) {
this.viewModel= viewModel;
}
public void Load(int userId) {
this.viewModel.Load(userId);
}
...
}
public class UserEditViewModel {
private readonly UserRepository repository;
public UserEditViewModel(UserRepository repository) {
this.repository = repository;
}
...
}
为了尽可能避免使用服务定位器模式,我设计了一个IFormFactory接口,它看起来像这样