我有一个 WPF MVVM 应用程序,我想重构它以使用 MvvmCross 来支持 Android 实现的 WPF 和 Mono。
目前,我们正在使用 Unity 3.0 进行依赖注入(inject),并依赖于它对容器层次结构的支持(一个主容器,带有主视图和 View 模型和服务;对于每个与服务器的 session ,一个带有 View 、 View 模型和服务的子容器)生命周期有限)。 MvvmCross 中的 IoC 可以支持子容器吗?如果不是,您会如何建议以与 MvvmCross 兼容的方式实现外部 IoC?
更新:
我们不需要支持多个子容器——任何时候只有一个子容器处于事件状态。
谢谢!
最佳答案
目前的 MvvmCross 框架主要针对“移动”和“平板”开发。在这个领域,到目前为止我遇到的需要多个容器的情况并不多——因此框架采用了简单的单容器方法。
如果您确实想要/需要多个容器,那么 MvvmCross 的设计目的是让您可以根据需要覆盖所有内容。因此,如果您想覆盖使用的 IoC 库,那么您应该能够使用任何 PCL IoC 容器(或注入(inject)不同的本地容器)。对于其中的每一个,您都需要为我们的 IoC 接口(interface)提供一个适配器 - 请参阅 IMvxIoCProvider.cs
除此之外,虽然我不完全了解您当前的需求(我比文本更了解代码!),但可能适合您特定问题领域的其他可能性包括:
IMyService
注册了一种类型,然后注册第二种类型将替换第一种。 IoCContainer
使用主 MvvmCross 容器 - 这样做您可以通过第二个容器提供您的子对象。这可能不是完美的构造函数注入(inject),但应该允许您密切控制子容器生命周期 virtual
添加到接口(interface)方法),您还可以考虑从 SimpleContainer 继承以覆盖功能并提供多个解析器字典。 总的来说,我认为你应该有很多选择......不过,需要注意的一件事是确保你了解每个应用程序平台上容器的生命周期。 WPF 生命周期很简单 - 应用程序启动,应用程序退出 - 但 WindowsPhone、WindowsStore 和 Android 应用程序可以以不同的方式启动(快捷方式、墓碑、搜索等)
关于mvvm - MvvmCross IoC 中的子容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16514691/