Prism Xamarin Forms Навигационный сервис, DependencyService - PullRequest
0 голосов
/ 17 мая 2018

Как сказала Призма,

Чтобы получить INavigationService в ваших ViewModels, просто попросите его в качестве параметра конструктора

https://prismlibrary.github.io/docs/xamarin-forms/Navigation-Service.html#getting-the-navigation-service

как это:

public SpeakPageViewModel(INavigationService navigationService) : base(navigationService)

{

_navigationService = navigationService;

}

и я хочу использовать интерфейс ITextToSpeech в качестве примера Prism:

public MainPageViewModel(ITextToSpeech textToSpeech)
{
    _textToSpeech = textToSpeech;
    SpeakCommand = new DelegateCommand(Speak);
}

https://prismlibrary.github.io/docs/xamarin-forms/Dependency-Service.html#use-the-service

Проблема в : при добавлении другого параметра в конструктор навигация не работает.

public SpeakPageViewModel(ITextToSpeech textToSpeech, INavigationService navigationService) : base(navigationService)
        {
            _navigationService = navigationService;
            _textToSpeech = textToSpeech;
        }

файл проекта: http://www.mediafire.com/file/nl6dx5c4mc3mg63/FirstPrismApp.rar

1 Ответ

0 голосов
/ 23 мая 2018

Prism 7 изменил это поведение, так как на самом деле это анти-шаблон для использования вторичного контейнера. Вам просто нужно зарегистрировать свой сервис TextToSpeech в IPlatformInitializer, например:

public class iOSInitializer : IPlatformInitializer
{
    public void RegisterTypes(IContainerRegistry containerRegistry)
    {
        containerRegistry.Register<ITextToSpeech, TextToSpeech_iOS>();
    }
}
...