【问题标题】:What is the benefit of MVVM Light Messenger?MVVM Light Messenger 有什么好处?
【发布时间】:2016-12-02 10:10:52
【问题描述】:

为什么要通过 MessengerInstance 的 Send 方法向订阅的接收者 viewModel 广播消息,导致内存泄漏的可能性(正如作者所说),并且担心注销和调试变得更加困难,而我可以创建一个公共方法在作为潜在接收者的 viewModel 中,然后从外部调用此公共方法,如下所示:

ServiceLocator.Current.GetInstance<MyViewModel1>().InitMyViewModel1();

【问题讨论】:

  • 您不应在其他视图模型中使用 ServiceLocator,请参见此处:blog.ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern 顺便说一句,如果您使用使用 Wea​​kReferences 的 messenger 版本,则不必担心内存泄漏。我不确定 MVVM light messenger 是如何实现的。经过短暂的谷歌搜索,您似乎不必担心内存泄漏。
  • 我没有发现反对在其他 ViewModel 中使用 ServiceLocator 的论点非常有说服力,因为它很好地满足了它的目的。
  • 依赖被隐藏。 a) 测试要困难得多。 b)这是非常危险的,因为如果您只想使用内部具有 ServiceLocator 调用的 VM 类,您将在运行时遇到麻烦。如果您使用构造函数/属性 DI 注入所有内容,您将在启动应用程序时立即知道

标签: c# .net wpf mvvm mvvm-light


【解决方案1】:

只有在没有依赖关系的项目之间进行通信时才使用 messenger,好的,考虑一下。我有 projectA 和 ProjectB ,它们相互独立,没有依赖关系,并且都具有作为 ProjectC 的共同引用。如果 ProjectA 想要 ProjectB 数据或反之亦然,那么您可以使用 Messenger 或任何 Eventtaggregator 类通过 ProjectC 通过从 A 订阅中发布来相互通信B 同样...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 2016-02-07
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多