wpf - MVVM:依赖注入(inject)和按需创建 ViewModel

标签 wpf mvvm ninject

我正在用 MVVM 和 Ninject 为 DI 捆绑一个小型 WPF 应用程序(第一次)。

为静态 UI 元素创建我的“单实例” View 模型很容易。但我正在努力使用按需创建的 ViewModel,例如关于用户操作,这些操作不能被注入(inject),但必须以某种方式在类本身中创建。

最简单的方法是注入(inject) Ninject 内核或使其全局可用,但我认为这是不好的做法。

在寻找解决方案时,我偶然发现了这两个:

  • ViewModelLocator:我认为它更多地用于“单实例”ViewModels,因为我使用 DataTemplates 将 ViewModel 与 View 连接起来(首先是 ViewModel),我觉得它不是正确的方式,但也许我会将它集成到我的单例(如果使用 WPF DataTemplates 有意义吗?)。
  • 工厂模式:我读到了使用抽象工厂创建对象并将工厂注入(inject)到 ViewModel 中,然后可以使用它来按需创建动态 ViewModel。听起来很容易,这就是为什么我怀疑,如果它只是重​​新定位问题?

  • 所以基本上我试图通过 Ninject 内核在 ViewModel 树的深处获取一个 ViewModel 对象的实例,例如由用户事件触发。
    因为我正在为 Ninject 使用事件代理,所以事件代理只连接到由 Ninject 创建的对象。这就是为什么我需要由 Ninject 创建/注入(inject)的 ViewModel。

    最佳答案

    使用工厂模式。
    工厂本身应该是 composition root 的一部分。正如马克·西曼所描述的那样。

    为简单起见,您可以使用 Ninject.Extensions.Factory .

    关于wpf - MVVM:依赖注入(inject)和按需创建 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38369864/

    相关文章:

    c# - nodejs从mysql中获取数据并发送给Client

    c# - WPF 将复选框绑定(bind)到 bool?

    c# - INotifyPropertyChanged 未使用 Entity Framework Core 正确调用

    .net - .net 的依赖注入(inject)和模拟框架

    asp.net-mvc-3 - 使用 Asp.Net MVC3 或 MVC4 进行 Ninject 依赖注入(inject)

    c# - 在使用附加行为单击按钮后,如何在短时间内显示工具提示?

    wpf - 为什么 ScrollViewer 中鼠标滚轮滚动消失了?

    ninject - 有人使用 Ninject 2.0 作为 nServiceBus ObjectBuilder 吗?

    c# - 如何绑定(bind)到 WPF 集合中的集合

    c# - mvvm 如何使 ListView 自动滚动到 ListView 中的新项目