您好,当我查看PrismApplicationBase
的实现时,发现下面的代码
/// <summary>
/// Registers all types that are required by Prism to function with the container.
/// </summary>
/// <param name="containerRegistry"></param>
protected virtual void RegisterRequiredTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterInstance<IContainerExtension>(_containerExtension);
containerRegistry.RegisterSingleton<ILoggerFacade, EmptyLogger>();
containerRegistry.RegisterSingleton<IApplicationProvider, ApplicationProvider>();
containerRegistry.RegisterSingleton<IApplicationStore, ApplicationStore>();
containerRegistry.RegisterSingleton<IEventAggregator, EventAggregator>();
containerRegistry.RegisterSingleton<IDependencyService, DependencyService>();
containerRegistry.RegisterSingleton<IPageDialogService, PageDialogService>();
containerRegistry.RegisterSingleton<IDeviceService, DeviceService>();
containerRegistry.RegisterSingleton<IPageBehaviorFactory, PageBehaviorFactory>();
containerRegistry.RegisterSingleton<IModuleCatalog, ModuleCatalog>();
containerRegistry.RegisterSingleton<IModuleManager, ModuleManager>();
containerRegistry.RegisterSingleton<IModuleInitializer, ModuleInitializer>();
containerRegistry.Register<INavigationService, PageNavigationService>(NavigationServiceName);
}
我们可以看到,导航服务的最后一次注册是否单例。
所以我的两个问题是:
INavigationService
的注册不像其他服务那样单身?NavigationServiceName
)答案 0 :(得分:0)
首先,在Prism应用程序中导航在概念上与Xamarin.Forms中的标准导航不同。 Xamarin.Forms导航依赖于Page类实例进行导航,而Prism删除了对Page类型的所有依赖关系,以实现ViewModel内部的松散耦合导航。在Prism中,不存在导航到View或导航到ViewModel的概念。因此INavigationService不是单例。
导航到体验或唯一标识符,该标识符表示您希望在应用程序中导航到的目标视图。所以您需要为其命名。
答案 1 :(得分:0)
如果您查看source code,您会发现PageNavigationService
没有自己的状态,因此不需要 将其设为单例
通常,人们会尝试使单身人士越少越好。它们会带来开销,无法消亡(造成故意的内存泄漏)并使事情复杂化。