访问 Prism Xamarin Forms 注入外部视图模型

Access to Prism Xamarin Forms injects outside viewmodels

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

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

2) 如果不是 verboten,是否可以访问 VM 之外的服务?在我看来,我并不容易将它们注入到服务的构造函数中。可以 "pass" 它们与其他参数一起进入我正在调用的服务函数吗?这似乎不是...... MVVM-ish?

更新:

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

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

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

ad 2) unity 会愉快地将依赖项注入服务,这些服务本身就是视图模型或其他服务的依赖项。这就是依赖注入容器的作用:-)