MVVMCross 6.0.1 Внедрение зависимостей не работает - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь заставить мои Xamarin Forms MvvmCross6 работать правильно, и несколько часов бился в мою голову, и я расстроен.Я уверен, что это, вероятно, что-то глупое, что я делаю неправильно.В настоящее время я пытаюсь следовать примеру здесь: https://nicksnettravels.builttoroam.com/post/2018/04/13/MVX=0F-A-first-MvvmCross-Application-(MVX1-days-of-MvvmCross).aspx

Я пытаюсь заставить внедрение зависимости уровня конструктора работать.В моем App.cs (основной проект) у меня есть:

public override void Initialize()
    {
        CreatableTypes()
            .EndingWith("Service")
            .AsInterfaces()
            .RegisterAsLazySingleton();

        CreatableTypes()
            .EndingWith("Client")
            .AsInterfaces()
            .RegisterAsLazySingleton();

        Mvx.RegisterSingleton<IUserDialogs>(() => UserDialogs.Instance);

        RegisterCustomAppStart<AppStart<LoginViewModel>>();
    }

В основном проекте AppStart.cs у меня есть следующее

public class AppStart<TViewModel> : MvxAppStart<TViewModel> where TViewModel : IMvxViewModel
{
    private readonly IMvxNavigationService _mvxNavigationService;

    public AppStart(IMvxApplication app, IMvxNavigationService mvxNavigationService)
        : base(app, mvxNavigationService)
    {
        _mvxNavigationService = mvxNavigationService;
    }

    protected override void NavigateToFirstViewModel(object hint)
    {
        NavigationService.Navigate<LoginViewModel>();
    }
}

В моем LoginViewModel (также в ядре)У меня есть:

 public class LoginViewModel : MvxViewModel
    {
      private readonly IMvxNavigationService _navigationService;
      private readonly IUserDialogs _userDialogs;
      public LoginViewModel(IMvxNavigationService navigationService, IUserDialogs userDialogs)
        {
            _navigationService = navigationService;
            _userDialogs = userDialogs;
        }

Когда я отлаживаю код, я получаю ошибку ссылки на объект во время выполнения.Я могу заставить его работать правильно только в том случае, если я удалю IUserDialogs из конструктора (а также _userDialogs = userDialogs из тела конструктора)

Вот ссылка на мой репозиторий github для моего примера кода игровой площадки проекта.https://github.com/danielPollack/ToolboxMvvmCross6Forms

Я понимаю, что MVVMCross6 был выпущен всего несколько недель, и это, вероятно, что-то действительно глупое с моей стороны.Что я делаю не так?

1 Ответ

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

Я бы порекомендовал не переопределять AppStart, как это.Например, вы не блокируете навигацию, поэтому она продолжается до завершения настройки.Это может привести к плохому состоянию вещей.Использование:

RegisterAppStart<LoginViewModel>();

...