【问题标题】:Get object instance from IoCContainer in a ViewModel从 ViewModel 中的 IoCContainer 获取对象实例
【发布时间】:2012-12-30 04:46:08
【问题描述】:

我是一名学习 MVVM 的学生,我正在开发一个 WPF 应用程序。 当我必须从 ViewModel_1 实例化 ViewModel_2 时,我的问题就出现了。 ViewModel_2 依赖于在 IoC 容器中注册的 XService。 因此,当我要求容器解析 ViewModel_2 时,它会创建所需的服务,将其注入构造函数,并提供 ViewModel。

我的问题是:我一直读到容器不应被任何类引用,但管理其生命周期的引导程序除外,那么谁将 ViewModel_2 提供给 ViewModel_1?

我能想到的唯一解决方案是在 ViewModel_1 的 ctor 中放置一个 Lazy,并在需要时访问它,但是如果我要从那里管理多个 VM 怎么办??

我希望你能帮助我。 非常感谢,新年快乐! =)

【问题讨论】:

    标签: c# mvvm inversion-of-control ioc-container


    【解决方案1】:

    据我了解,您的 ViewModel_1 包含属性 ViewModel_2。你需要用 DI 注入这个ViewModel_2。在这个简单的例子中,您可以在ViewModel_1 的构造函数中注入ViewModel_2

    您应该向我们提供有关“如果我有多个虚拟机要从那里管理怎么办”的更多详细信息。 你说的是什么虚拟机?那是哪里”?如果您发布ViewModel_1ViewModel_2 的代码,这将有助于理解您的问题。

    【讨论】:

    • 感谢基里尔的回复。 VM2 不一定是 VM1 的属性,而只是在 VM1 中创建并由它用来做某事的 VM。我想知道我是否在 VM1 中创建的不仅仅是 VM2,我是否必须为每个额外的 VM 添加一个 ctor 参数,或者是否有更简单的解决方案?再次感谢您。
    • 抱歉,“您可以在 ViewModel_1 的控制器中注入 ViewModel_2”是什么意思?
    • *构造函数。它的拼写错误
    • 一般来说,如果你需要注入一些独立的依赖,你应该将它们都添加到构造函数参数中。在某些特殊情况下,当您的依赖项相互链接时,它可能是针对这种情况的其他解决方案。
    • 我想知道处于相同情况的人们在处理比我大得多的项目时的行为,并且需要调用更多的 ViewModel =(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    相关资源
    最近更新 更多