1

我有一个 WPF MVVM 应用程序,我想重构它以使用 MvvmCross 来支持 Android 实现的 WPF 和 Mono。

目前,我们正在使用 Unity 3.0 进行依赖注入,并依赖于它对容器层次结构的支持(一个主容器,带有主视图和视图模型和服务;对于每个与服务器的会话,一个带有视图、视图模型和服务的子容器)寿命有限)。MvvmCross 中的 IoC 可以支持子容器吗?如果不是,您会如何建议以与 MvvmCross 兼容的方式实现外部 IoC?

更新: 我们不需要支持多个子容器——任何时候只有一个子容器处于活动状态。

谢谢!

4

1 回答 1

3

目前的 MvvmCross 框架主要针对“移动”和“平板”开发。在这个领域,到目前为止我遇到的需要多个容器的情况并不多——因此框架采用了简单的单容器方法。

如果您确实想要/需要多个容器,那么 MvvmCross 的设计目的是让您可以根据需要覆盖所有内容。因此,如果您想覆盖使用的 IoC 库,那么您应该能够使用任何 PCL IoC 容器(或注入不同的本地容器)。对于其中的每一个,您都需要为我们的 IoC 接口提供一个适配器 - 请参阅IMvxIoCProvider.cs


除此之外,虽然我不完全了解您当前的需求(我比文本更了解代码!),但可能适合您特定问题领域的其他可能性包括:

  • 你总是可以为 MvvmCross 对象保留当前的 ​​MvvmCross 容器,但为你的类使用单独的 IoC 系统。虽然有点过时,但这篇关于创建自定义自定义 ViewModelLocator的博文帮助@gshackles 使用 TinyIoC 和构造函数注入 - 看看他在https://github.com/gshackles/CrossBar中构建的内容

  • MvvmCross 容器允许您在需要时替换解析器 - 即,如果您为接口注册了一种类型IMyService,那么注册第二种类型将替换第一种。

  • 您可以在主 MvvmCross 容器中注册第二个IoCContainer- 这样做您可以通过该第二个容器提供您的子对象。这可能不是完美的构造函数注入,但应该允许您密切控制子容器生命周期

  • 通过一些小的更改(继承),您可以轻松地创建当前“简单”MvvmCross 容器的多个副本- 当前唯一迫使该对象成为单例的是它的继承。

  • 通过一些小的更改(virtual添加到接口方法中),您还可以考虑从 SimpleContainer 继承以覆盖功能并提供多个解析器字典。

总的来说,我认为你应该有很多选择......不过,需要注意的一件事是确保你了解每个应用程序平台上容器的生命周期。WPF 生命周期很简单 - 应用程序启动,应用程序退出 - 但 WindowsPhone、WindowsStore 和 Android 应用程序可以以不同的方式启动(快捷方式、墓碑、搜索等)

于 2013-05-14T08:58:41.670 回答