我正在使用 MVVM 模式和 Prism 框架编写应用程序(Silverlight 和 WPF)。在我的应用程序中,我有一个包含客户列表的网格。在此之下,我提供了提供客户详细信息的各种视图。所有信息都来自 WCF 服务,该服务提供来自查询的数据以及在接收到数据时触发事件的回调。更改网格中的选定项目时会更新详细信息。还有一个过滤视图控制详细信息的日期范围。
我还需要为特定客户实现一组类似的视图。提供的信息是相同的,因此显然最好重用相同的视图和模型类。
我最初的想法是为两种场景构建一个位于模型和 WCF 服务之间的单独中间服务。然后,我将通过按名称注册实例将模型绑定到特定服务。
不幸的是,这意味着我必须自己实例化很多类,而不是依赖我更喜欢的依赖注入。
那么,对于所有的 MVVM 专家,应该如何构建视图、模型和服务以最好地利用 Prism 框架的特性并促进代码重用?
非常感谢!
==== 编辑:添加以下文本和示例 ====
这是一个简单的例子,我希望能解释我想要完成的事情。
public class CustomerViewModel : ICustomerViewModel
{
public ICustomerView View { get; private set; }
private readonly ICustomerService customerService { get; set; }
private Customer customer;
public CustomerViewModel(ICustomerView view, ICustomerService service, IEventAggregator eventAggregator)
{
customerService = service;
eventAggregator.GetEvent<SelectedCustomerChangedEvent>().Subscribe(CustomerChanged);
eventAggregator.GetEvent<CustomerInfoUpdatedEvent>().Subscribe(CustomerUpdated);
View = view;
View.Model = this;
}
public string Name
{
get
{
return customer.Name;
}
}
public string Email
{
get
{
return customer.Email;
}
}
public void CustomerChanged(int customerId)
{
customerService.RequestCustomerInfo(customerId);
}
public void CustomerUpdated(Customer customer)
{
this.customer = customer;
}
}
此客户视图模型基于客户在网格中的当前设计。选择客户会触发 SelectedCustomerChangedEvent,这将导致视图模型请求信息。
它由使用回调机制提供数据的底层 WCF 服务提供(数据可能需要很长时间才能检索/计算,因此简单的 WCF 调用将不起作用)。这工作得很好。问题是我想在应用程序的不同区域重用相同的视图和模型,以显示有关特定客户而不是当前选定客户的信息。
我最初的想法是创建一个中间服务来处理列表的 SelectedCustomerChangedEvent 以及打开客户特定视图时的类似事件。然后它将通过相同的 CustomerInfoUpdatedEvent 向模型提供数据。
问题是,由于我现在有 2 个服务实现了相同的接口,我需要为它们命名,然后让视图模型以某种方式知道从容器中检索哪一个。
我知道我可能犯了设计错误。好消息是我有时间修复它,但我不知道如何修复它。