在使用PRISM和Enterprise Library处理具有大量 CRUD 操作的 LOB 桌面应用程序时,我注意到一个重复出现的模式似乎很烦人。对于每个域模型实体(例如 Contact),我发现我用视图模型(例如 ContactVM)自我包装了它,然后我引入了一个新的ContactsVM
(注意“s”),其中后一个类接受一个用于填充的存储库接口对于我从存储库中读取ObservableCollection<ContactVM>
的每个Contact
实体,我将它包装在一个ContactVM
中,我通过构造函数将实体与我的 ViewModel 所需的其他企业库服务一起传递给它。
问题是我所有的视图模型构造函数都开始采用这种模式:
ViewModel(EntityToWrap e, DependencyFromEntLib, OtherDependencies ...)
现在这是一个问题,因为大多数工具和库都需要默认的无参数构造函数(例如,一些商业数据网格需要它来提供过滤支持),而且您不能使用设计数据来可视化实体,因为它们也需要无参数构造函数。最后的问题是:构建视图模型的正确方法是什么,Entlib 服务应该通过构造函数还是通过ServiceLocator提供?