【问题标题】:NavigationService Xamarin with Prism and Autofact can't find my navigationNavigationService Xamarin 与 Prism 和 Autofact 找不到我的导航
【发布时间】:2017-07-11 04:53:19
【问题描述】:

我在继承 PrismApplication for Autofac 的应用上使用 Autofac 容器注册了 Xamarin 表单页面

_container.RegisterTypeForNavigation<MasterLayoutPage_View, MasterLayoutPageViewModel>("MasterLayoutPage");

然后我这样导航:

  await NavigationService.NavigateAsync("MasterLayoutPage");

但它总是说 MasterLayoutPage 没有注册。 但是当我检查我的 Container 的注册类型时,它就在那里,完全添加为上面的注册。

我错过了什么吗?它适用于 Unity,我只是更改为 Autofac。

我发现这很奇怪,想知道这可能是一个错误,还是带有 Autofact 的 NavigationService 无法像 Unity 那样注册类型?

【问题讨论】:

  • 您能否提供重现该问题的示例?这是您真正需要提供代码以便任何人为您提供帮助而不是猜测的问题。那就是说您正在从 Unity 过渡并且不熟悉 Autofac 我真的建议您改用 DryIoc。
  • 我完全熟悉 Autofac 已经使用了很多年了……但在这种情况下,它的问题在于导航服务。如图所示,所有类型都已注册...因此,即使 PageNavigationRegistery 向我显示我的 MasterpageLagout 在那里(参见最后一张图片)和容器(第二张图片),它仍然会引发第一个图像异常。我不能给你更多的代码,而不仅仅是 PrismApplication 得到了我用于注册的容器。然后是导航线。没有什么要补充的了……使用 Prism.Autofac 的 Nuger

标签: xamarin prism autofac


【解决方案1】:

似乎我的问题是我没有在 App.xaml.cs 上的重写方法 RegisterTypes 中注册页面我在 Initialize 重写方法上注册了类型。它确实适用于 Unity,但不确定为什么当它与我使用的容器相同时它与 autofac 的工作方式不同......也许统一的 prismApplication 与 Autofac 的 PrismApplication 有一些不同,我将看看那些的实现两个

【讨论】:

  • 两者之间的唯一区别是您的服务已注册到 ContainerBuilder,然后更新 Container。无论是哪种 Container,您都需要在尝试导航之前注册类型。
  • 我在导航之前注册了所有类型,但我在 Application OnInitialize 上进行了注册,然后按照我的主要问题进行导航。尽管我在调用 Navigation 之前在 Container 和 Page Register 中找到了所有类型,但所有类型都已注册,但它得到了 null ref 异常......导航前的结果。使用 Unity,我可以毫无问题地注册页面 OnInitialize 级别。
  • 如果您发现使用 Unity 的某些东西不适用于 Autofac,请在 GitHub 上打开一个带有示例代码的问题,向我们展示具体的场景。谢了。
猜你喜欢
  • 2016-06-06
  • 2018-02-09
  • 1970-01-01
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多