2016-01-05 3 views
1

Я работаю над образцом приложения Xamarin.Forms для iOS, используя PRISM.Призма для Xamarin, зависимость не удалась для INavigationService

Но когда я попытался использовать INavigationService в ViewModel, он не смог говоря зависимость Сбой интерфейса INavigationService

Я не знаю, что не так я делаю, как мы можем получить вокруг него, или это ошибка в INavigationServices инъекции ,

Благодаря Divikiran Ravela

Heres код

public App() 
    { 
     // The root page of your application 
     Prism = new PrismBootStrap(); 
     Prism.Run(this); 
    } 

    public class PrismBootStrap : UnityBootstrapper 
{ 
    protected override Page CreateMainPage() 
    { 
     return new NavigationPage(Container.Resolve<HomePage>()); 
    } 

    protected override void RegisterTypes() 
    { 
     Container.RegisterTypeForNavigation<HomePage, HomePageViewModel>(); 
    } 
} 


    public class HomePage : ContentPage 
    { 

     public HomePageViewModel ViewModel { get; set; } 


    public HomePage() 
    { 
     ViewModel = App.Prism.Container.Resolve<HomePageViewModel>(); 
     Content = new StackLayout 
     { 
      Children = { 
       new Label { Text = "Hello ContentPage" } 
      } 
     }; 
    } 
} 


public class HomePageViewModel : BindableBase 
{ 
    private readonly INavigationService _navigationService; 

    public HomePageViewModel(INavigationService navigationService) 
    { 
     _navigationService = navigationService; //Fails here 
    } 
} 

ответ

1

INavigationService зависит от использования ViewModelLocator. Если вы его не используете, услуга не может быть введена. Вместо того, чтобы вручную разрешать вашу виртуальную машину, используйте свойство ViewModelLocator.AutowireViewModel. Кроме того, вы не хотите использовать свой контейнер. При использовании DI вам нужен только один корневой состав.

Кроме того, я рекомендую использовать последний просмотр 6.1. У этого есть тонна улучшений навигации.

+0

Спасибо за входной мозг, оцените его. Эй, я не использую страницы XAML, чтобы установить AutowireViewModel в true вместе с другими пространствами имен. Я использую contentpage.cs, я попробовал SetValue (ViewModelLocator.AutowireViewModel, true) на странице ctor. Но все же у меня была такая же проблема. Можете ли вы направить меня с некоторым примером кода. – Div

+0

Вам нужно использовать ViewModelLocator.SetAutowireViewModel, потому что это присоединенное свойство. –

+0

Я пробовал ниже //SetValue(ViewModelLocator.AutowireViewModelProperty, true); ViewModelLocator.SetAutowireViewModel (это, правда); Не работает пока, пожалуйста, дайте мне знать, что я делаю неправильно – Div

Смежные вопросы