2016-01-05 95 views
1

我正在使用PRISM爲iOS設計示例Xamarin.Forms應用程序。Xamarin的棱鏡,INavigationService的依賴失敗

但是,當我試圖在視圖模型使用INavigationService,它失敗說依賴失敗接口INavigationService

我不知道自己做錯了什麼,我做什麼,我們如何才能避開它還是在INavigationServices注入的錯誤。

感謝 Divikiran Ravela

繼承人的代碼

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,我在頁面ctor上嘗試了SetValue(ViewModelLocator.AutowireViewModel,true)。但我仍然有同樣的問題。你可以請指導我一些示例代碼。 – Div

+0

您需要使用ViewModelLocator.SetAutowireViewModel,因爲它是一個附加屬性。 –

+0

我試過 // SetValue(ViewModelLocator.AutowireViewModelProperty,true); ViewModelLocator.SetAutowireViewModel(this,true); 還沒有工作,請讓我知道我在做什麼錯了 – Div