【问题标题】:Access to Prism Xamarin Forms injects outside viewmodels访问 Prism Xamarin Forms 会注入外部视图模型
【发布时间】:2016-09-06 17:44:33
【问题描述】:

我目前正在开发 Xamarin Forms 应用程序,并且正在对其进行重新设计以与 Prism 一起使用。我真的在努力遵守 MVVM 设计模式(我正在努力成长为一名业余开发人员并学习如何使用它们)。

1) 从 MVVM 设计模式的角度来看,在 VM 之外使用消息传递服务(Prism 的 EventAggregator)和 UI 交互(Prism 的 PageDialogService)是否不合适?我编写了几个从 VM 调用的“服务”,并且发现需要同时访问消息传递和 UI 服务。例如,VM 调用服务,该服务检索并处理一些数据,根据这些计算向用户提出问题,然后继续完成处理返回所需的值。正确地说,是否应该将控制权返回给 VM 以“仅”提出问题?

2) 如果没有禁止,是否可以访问虚拟机之外的服务?在我看来,我并不容易将它们注入到服务的构造函数中。可以将它们与其他参数一起“传递”到我正在调用的服务函数中吗?这似乎不... MVVM-ish?

更新:

我不确定我的所有步骤都是必要的,但在下面的帮助下,我得到了它的工作。首先,我将我的单例服务转换为一个接口(IMyService)和一个实现类(MyService)。接下来,我在 App.xaml.cs 中覆盖 ConfigureContainer 并调用 Container.RegisterType<IMyService, MyService>(new ContainerControlledLifetimeManager());

然后我可以将 IMyService 注入到我的 ViewModel 中,就像 IEventAggregator 和 IPageDialogService 一样,我还可以将这些服务注入到我的实现类 (MyService) 的公共构造函数中。

【问题讨论】:

    标签: mvvm xamarin.forms prism


    【解决方案1】:

    ad 1) 事件聚合器主要用于 UI,但如果您不需要“真实”消息总线的更高级功能,您也可以将其用作应用程序其他部分的消息总线。

    ad 2) unity 很乐意将依赖项注入到服务中,这些服务本身就是视图模型或其他服务的依赖项。这就是依赖注入容器的作用:-)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-18
    • 2017-09-14
    • 2016-12-05
    • 2018-09-07
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多