Dan*_*rth 5 .net c# wpf dependency-injection mvvm
在我的WPF应用程序中,我使用MVVM模式和依赖注入.
从数据库准备数据的ViewModel获取注入构造函数的存储库.它们还使用构造函数中的存储库中的数据填充属性.
ViewModel都是在ViewModelLocator类的静态构造函数中创建的,所有View都使用它来绑定到它们的ViewModel.
这有以下缺点:
我可以想出两种解决这些问题的方法:
有没有其他方法可以解决这个问题?别人怎么解决这个问题?
以这样的方式实现 ViewModelLocator:每次调用 ViewModelLocator 上的相应属性时,它都会创建所请求的 ViewModel。
这更多是我在这种情况下通常采取的方法。然而,我并没有通过 ViewModel 的 DI 来组合 ViewModelLocator,而是组合了创建 ViewModel 的工厂。
我不喜欢这种方法,因为我的组合根不会在程序启动时执行,而是会在程序实例的整个生命周期中传播。
通过让组合组成工厂而不是类型本身,这个问题至少部分得到“解决”。组合在启动时发生一次,但创建可以在相关 ViewModel 的任何时间发生。
例如,使用 MEF,您可以将导入切换为直接使用ExportFactory<T>而不是直接使用其类型。与NonShared Creation Policy一起,您可以根据需要构建 ViewModel,并始终使用新数据,而不会出现时间耦合问题。