【发布时间】:2018-04-27 22:34:24
【问题描述】:
我正在开发一个 WPF 应用程序,试图尽可能地遵守 MVVM 模式,包括 DI 和 IoC。 该应用程序的结构为“ViewModel first”,其中视觉层次结构包含以下内容:
MainView
|-Login View
|-Content View
|-Content A
|-Content B
|-Content x
每个视图都由其 VM 引用; “MainViewModel”和“ContentViewModel”公开了一个引用子虚拟机的属性来控制内部元素的导航。 也就是说,“内容 A”、“内容 B”和类似项目依赖于我想通过 DI 管理的各种服务。
我使用 UnityContainer 并在“OnStartup”中注册所有依赖项,但我的问题来了:因为我不想使用 ServiceLocator,如何让“子视图模型”知道容器?我很确定我在理论上做错了什么,但我没有在网上找到任何参考资料。 我在网上找到的每个教程/示例只需在容器中注册依赖项,然后立即解析模型。
【问题讨论】:
-
你是如何创建子视图模型的?
-
@mm8 父VM实例化它们并将对象分配给“CurrentSubVM”属性以实现绑定视图交换
-
父级有权访问容器吗?然后你可以用容器注入孩子。
-
@mm8 是的,父级可以访问容器。您的意思是通过构造函数 DI 将容器传递给孩子吗?
-
是的,完全正确。这就是依赖注入的工作原理:)
标签: wpf mvvm inversion-of-control ioc-container