【问题标题】:IOC container on nested view models嵌套视图模型上的 IOC 容器
【发布时间】: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


【解决方案1】:

由于父视图模型可以访问容器并负责创建任何子视图模型,因此当您在父视图模型中实例化子视图模型时,您可以简单地将子视图模型与容器的引用一起注入:

this.ChildViewModelProperty = new ChildViewModel(_container);

这是构造函数依赖注入的典型例子。

【讨论】:

    猜你喜欢
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多