我正在将Prism与Unity容器一起用于我的Xamarin Forms应用程序。
我在这里注册我的网页
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容器中注册的最后一个视图。 这就是为什么我想在注册新视图之前取消注册以前的视图。
答案 0 :(得分:1)
您应该导航到Project.Namespace1.ViewA
和Project.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
而不是一堆字符串。