【发布时间】:2012-03-06 03:56:38
【问题描述】:
在我的 WPF 应用程序中,我将 MVVM 模式与依赖注入一起使用。
从数据库准备数据的 ViewModel 将存储库注入到构造函数中。它们还使用构造函数中存储库中的数据填充属性。
ViewModel 都是在 ViewModelLocator 类的静态构造函数中创建的,所有 View 都使用该构造函数绑定到它们的 ViewModel。
这样有以下缺点:
- 视图中的数据永远不会更新,即使在关闭和重新打开它们时也不会更新,因为 ViewModel 实例始终相同。
- 在打开第一个视图时,所有 ViewModel 都会被实例化,并且它们需要从数据库中加载数据。
我可以想到两种方法来解决这些问题:
- 让每个 ViewModel 实现一个从数据库读取数据并初始化属性的方法 - 而不是在构造函数中这样做。这将需要在每次打开视图时调用该方法。这引入了我不喜欢的temporal coupling。
- 以这样一种方式实现 ViewModelLocator:每次调用 ViewModelLocator 上的相应属性时,它都会创建请求的 ViewModel。我不喜欢这种方法,因为我的组合根不会在程序启动时执行,而是会分布在程序实例的整个生命周期中。
还有其他方法可以解决这个问题吗?其他人是如何解决这个问题的?
【问题讨论】:
标签: c# .net wpf mvvm dependency-injection