【问题标题】:Unregister View and ViewModel in Prism.Unity.Forms在 Prism.Unity.Forms 中注销 View 和 ViewModel
【发布时间】:2018-01-16 06:22:09
【问题描述】:

我正在为我的 Xamarin Forms 应用程序使用带有 Unity 容器的 Prism。

我在哪里注册这样的页面

Container.RegisterTypeForNavigation<ViewType,ViewModelType>();

有时

Container.RegisterTypeForNavigation<ViewType>();

现在我想取消注册一些已注册的页面及其 ViewModel。

有点像

Container.UnRegisterTypeForNavigation<ViewType>();

但是想不出办法。需要帮助。

到目前为止我已经尝试过了,

ContainerRegistration registrationContainer = Container.Registrations.FirstOrDefault(obj => obj.MappedToType == GetPageType(pageType));
if (registrationContainer?.LifetimeManager!=null)
{
    registrationContainer.LifetimeManager.RemoveValue();
}

没有运气。

我要取消注册的原因...

我有两种观点

Project.Namespace1.ViewA
Project.Namespace2.ViewA

现在我想在某些情况下打开Project.Namespace1.ViewA,在其他情况下打开Project.Namespace2.ViewA

可以这样做

NavigationService.NavigateAsync("ViewA");

它导航到在 Unity 容器中注册的最后一个视图。 这就是为什么我想在注册新视图之前取消注册以前的视图。

【问题讨论】:

  • 为什么要这样做?注销视图不会隐藏它,注销视图模型也不会处理任何事情。
  • Unity 没有现成的注销方法。您可以查看此答案以清除注册:stackoverflow.com/a/44361488/114664。但是,我同意@Haukinger 的观点,这可能不是一个好主意。你想完成什么?
  • 我已经更新了我的问题,说明取消注册视图的原因。希望这会有所帮助。

标签: xamarin.forms unity-container prism


【解决方案1】:

您应该导航到Project.Namespace1.ViewAProject.Namespace2.ViewA(或其他一些唯一名称)。

RegisterTypeForNavigation 采用可选的字符串参数作为名称,因此为每个视图传递一个唯一名称。当导航到ViewA 时,您应该导航到您想要导航到的具体ViewA。如果您绝对需要模拟 register-unregister-behavior,请创建一个服务来保存当前活动的ViewA

例子:

Container.RegisterTypeForNavigation<Project.Namespace1.ViewA,ViewModelType>( "ViewA1" );
Container.RegisterTypeForNavigation<Project.Namespace2.ViewA,ViewModelType>( "ViewA2" );

interface IViewASelector
{
    string ViewA { get; set; }
}

// register Namespace1 and unregister Namespace2
_viewASelector.ViewA ="ViewA1";

// navigate to the active ViewA
NavigationService.NavigateAsync( _viewASelector.ViewA );

您可能还想要一个enum 而不是一堆字符串。

【讨论】:

  • 不错的把戏。我现在就去吧。顺便说一句,您现在还有其他支持实际注销类型/实例的 ioc 容器吗?
  • 可能 ninject 有这个,因为它们有很多奇怪的功能 ;-) 并且 unity 也可以做到,虽然是手动的,但取消注册对我来说就像是在对抗容器,
猜你喜欢
  • 2017-07-31
  • 2015-01-09
  • 2014-08-07
  • 2014-07-12
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 2019-04-07
  • 1970-01-01
相关资源
最近更新 更多