Prism.Forms: Почему навигационный сервис не является синглтоном? - PullRequest
0 голосов
/ 13 февраля 2019

Привет, когда я смотрю на реализацию 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);
    }

, мы видим, что последняя регистрация для службы навигации - НЕ singleton.

Итак, у меня два вопроса:

  1. Почему регистрация на INavigationService не похожа на другие сервисы?
  2. Почему мы присваиваем имя дляэто (то есть NavigationServiceName)

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Если вы посмотрите на исходный код , вы заметите, что PageNavigationService не имеет собственного состояния, поэтому не нужно , чтобы сделать его одиночным.

Обычно старается иметь как можно меньше синглетонов.Они вносят накладные расходы, не могут умереть (вроде преднамеренной утечки памяти) и усложняют ситуацию.

0 голосов
/ 14 февраля 2019

Прежде всего, навигация в приложении Prism концептуально отличается от стандартной навигации в Xamarin.Forms.В то время как навигация Xamarin.Forms зависит от экземпляра класса Page для навигации, Prism удаляет все зависимости от типов страниц для достижения слабосвязанной навигации из ViewModel.В Prism концепция перехода к View или навигации к ViewModel не существует. Поэтому INavigationService не является одноэлементным.

Перейдите к опыту или уникальному идентификатору, который представляет целевое представление, по которому вы хотите перейти.в вашем приложении.поэтому вам нужно присвоить ему имя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...