如何迁移Xamarin.Forms+;从Unity到DryIoC的Prism应用程序?

如何迁移Xamarin.Forms+;从Unity到DryIoC的Prism应用程序?,xamarin,prism,dryioc,Xamarin,Prism,Dryioc,我正在尝试将容器更改为Xamarin.Forms+Prism应用程序的DryIOC。 Visual studio正在编译和启动应用程序,但应用程序启动时不会启动应用程序。初始化方法将应用程序保持在空白屏幕上 我做了什么 从Android和共享项目中删除了Prism.Unity、Unity和Microsoft相关软件包 在Android和共享项目中添加了DryIoc.dll(v2.10.7)和Prism.DryIoc.Forms(v6.3.0.1)包 已将App.xaml中的prism xmlns

我正在尝试将容器更改为Xamarin.Forms+Prism应用程序的DryIOC。 Visual studio正在编译和启动应用程序,但应用程序启动时不会启动应用程序。初始化方法将应用程序保持在空白屏幕上

我做了什么

  • 从Android和共享项目中删除了Prism.Unity、Unity和Microsoft相关软件包
  • 在Android和共享项目中添加了DryIoc.dll(v2.10.7)和Prism.DryIoc.Forms(v6.3.0.1)包
  • 已将App.xaml中的prism xmlns更改为指向:

    xmlns:prism=“clr命名空间:prism.DryIoc;assembly=prism.DryIoc.Forms”

  • 将MainActivity.cs中的雄甾烷初始化器类更改为:

    公共类AndroidInitializer:IPlatformInitializer
    {
    公共无效注册表类型(IContainer容器)
    {}
    }

  • 我使用Prism DryIoC模板创建了一个空白应用程序,效果很好。另外,我将App.xaml、App.xaml.cs和MainActivity.cs文件与我的项目中的文件进行了比较,一切正常


    我还能做什么?

    如果您要转换,则需要执行以下操作:

    1) 删除以下三个包 -棱柱体 -统一 -公共服务提供者

    2) 将xml名称空间更新为
    clr名称空间:Prism.DryIoc;assembly=Prism.DryIoc.Forms
    在App.xaml中

    3) 从App.xaml.cs中删除Unity名称空间,并将其替换为
    Prism.DryIoc
    DryIoc
    。在任何
    IPlatformInitializer
    实现中执行相同操作,同时将
    IUnityContainer
    更改为
    IContainer

    4) 更新任何服务注册,因为Unity和DryIoc之间的签名不匹配

    5) 更新可能直接使用
    IUnityContainer
    来使用
    IContainer
    的任何服务或您特别拥有的任何内容

    6) 删除您的
    obj
    bin
    文件夹,清理并重建

    如果您遇到任何问题,您可以将您的项目与或示例进行比较

    更新
    从Prism 7.2开始,建议使用的XML名称空间只是
    http://prismlibrary.com
    这将替换您以前可能拥有的任何clr命名空间声明,并且无论您使用的是正式的Prism软件包还是Prism的扩展版本,它都将起作用。

    对我有效的是使用Prism DryIoC模板创建一个新项目,并将我所有的代码移到它上面。

    我不认为在当前解决方案中交换几个程序集会解决这个问题。您可能希望使用Prism DryIoc启动一个空白应用程序,并开始将代码/程序集复制到该应用程序中。您好@R.Richards,谢谢。我也考虑过这个选项,但是为什么删除旧的包不起作用呢?这对我来说毫无意义。这不是一件正确的事情吗?理想情况下,是的,这应该行得通。我无法解释为什么没有。有些事情(显然)不太对劲。你有什么错误吗?我担心你可能会花更多的时间来研究这一点,而不是复制东西并让它工作起来。对不起,我帮不了你什么忙。是的,你说得对。我已经浪费了很长时间调查这件事了。我将创建一个新项目。谢谢曼希丹!与我所做的步骤差不多,唯一的区别是我离开了CommonServiceLocator。我将其删除,再次检查并重播所有步骤,但结果相同:一个空白屏幕。未调用App.OnInitialized方法。请确保在再次运行应用程序之前从仿真程序中卸载该应用程序。该方法不起作用的唯一原因是生成系统中存在工件。如果你已经做了所有这些,没有看到所有的东西,我就不能给你更多的建议了。是的,丹。我注意到VS2017 v15.2上有奇怪的行为,比如构建时出现间歇性错误。e、 g.
    无法将“obj\Debug\blablabla.dll”复制到“bin\Debug\blablabla.dll”。
    我将使用DryIoc模板创建一个新项目,并将我的所有代码传输到该项目中。我从DryIoc模板创建了一个新项目,移动了所有代码,该项目成功了!但是现在我在Prism/DryIoc上出错了。我将在github上发布一个问题