2017-02-20 16 views
1

У меня есть приложение Xamarin Forms с MVVM Light. Я создал класс NavigationService и зарегистрировал его в конструкторе:MVVM Light - уже зарегистрирована фабрика для INavigationService

public App() 
    { 
     InitializeComponent(); 

     // Setup navigation service: 
     var navigationService = new NavigationService(); 
     // Configure pages: 
     navigationService.Configure(AppPages.MainPage, typeof(MainPage)); 
     navigationService.Configure(AppPages.DetailsPage, typeof(DetailsPage)); 
     // Register NavigationService in IoC container: 
     SimpleIoc.Default.Register<INavigationService>(() => navigationService); 

     // Create new Navigation Page and set MainPage as its default page: 
     var firstPage = new NavigationPage(new MainPage()); 
     // Set Navigation page as default page for Navigation Service: 
     navigationService.Initialize(firstPage); 
     // You have to also set MainPage property for the app: 
     MainPage = firstPage; 
    } 

После того, как я выйти из приложения с задней стрелкой на Android и снова открыть его У меня есть исключение:

enter image description here

Я пробовал различные подходы: Дерегистрацию и снова зарегистрировать услугу или проверить, зарегистрирована ли служба, но все еще есть некоторые проблемы. Я был бы благодарен за помощь.

ответ

0

Это должно быть, как показано ниже - он правильно работает в настоящее время:

public App() 
    { 
     InitializeComponent(); 

     INavigationService navigationService; 

     if (!SimpleIoc.Default.IsRegistered<INavigationService>()) 
     { 
      // Setup navigation service: 
      navigationService = new NavigationService(); 

      // Configure pages: 
      navigationService.Configure(AppPages.MainPage, typeof(MainPage)); 
      navigationService.Configure(AppPages.DetailsPage, typeof(DetailsPage)); 

      // Register NavigationService in IoC container: 
      SimpleIoc.Default.Register<INavigationService>(() => navigationService); 
     } 

     else 
      navigationService = SimpleIoc.Default.GetInstance<INavigationService>(); 

     // Create new Navigation Page and set MainPage as its default page: 
     var firstPage = new NavigationPage(new MainPage()); 
     // Set Navigation page as default page for Navigation Service: 
     navigationService.Initialize(firstPage); 
     // You have to also set MainPage property for the app: 
     MainPage = firstPage; 
    } 

Не забудьте добавить ниже методов INavigationService интерфейса:

void Configure(AppPages pageKey, Type pageType); 
void Initialize(NavigationPage page);