我正在尝试将容器更改为 Xamarin.Forms + Prism 应用程序的 DryIOC。 Visual Studio 正在正确编译和启动应用程序,但当应用程序启动时,它不会触发 App.OnInitialized 方法,使应用程序保持在空白屏幕上。
我做了什么?
- 从 Android 和共享项目中删除了 Prism.Unity、Unity 和 Microsoft 相关包
- 将 DryIoc.dll (v2.10.7) 和 Prism.DryIoc.Forms (v6.3.0.1) 包添加到 Android 和共享项目
更改 App.xaml 中的 prism xmlns 指向:
xmlns:prism="clr-namespace:Prism.DryIoc;assembly=Prism.DryIoc.Forms"
将 MainActivity.cs 中的 AndroidInitializer 类更改为:
公共(public)类 AndroidInitializer : IPlatformInitializer { public void RegisterTypes(IContainer 容器) {} }
我使用 Prism DryIoC 模板创建了一个空白应用程序,它运行良好。此外,我将 App.xaml、App.xaml.cs 和 MainActivity.cs 文件与我的项目中的文件进行了比较,一切正常。
我还能做什么?
最佳答案
如果您要转换,则需要执行以下操作:
1)删除下面三个包 - Prism.Unity.Forms - 团结 - 通用服务定位器
2) 在您的 App.xaml 中将 xml 命名空间更新为 clr-namespace:Prism.DryIoc;assembly=Prism.DryIoc.Forms
3) 从您的 App.xaml.cs 中删除 Unity 命名空间,并将其替换为 Prism.DryIoc
和 DryIoc
。在任何 IPlatformInitializer
实现中执行相同操作,同时将 IUnityContainer
更改为 IContainer
4) 更新任何服务注册,因为签名在 Unity 和 DryIoc 之间不匹配。
5) 将可能直接使用IUnityContainer
的任何服务或您特别拥有的任何东西更新为使用IContainer
。
6) 删除您的obj
和bin
文件夹,清理并重建。
如果您遇到任何问题,您可以将您的项目与 Hamburger Menu 进行比较或 Tabbed Navigation样本。
更新
从 Prism 7.2 开始,推荐使用的 XML 命名空间很简单 http://prismlibrary.com
这将替换您之前可能拥有的任何 clr-namespace 声明,并且无论您是否使用官方 Prism 包或 Prism 的扩展版本之一。
关于xamarin - 如何将 Xamarin.Forms+Prism 应用程序从 Unity 迁移到 DryIoC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44010725/