MVVMCross 6.0.1 依赖注入不起作用

MVVMCross 6.0.1 Dependency Injection not working

我正在尝试让我的 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 存储库的 link,用于我的示例项目 playground 代码。 https://github.com/danielPollack/ToolboxMvvmCross6Forms

我意识到 MVVMCross6 才推出几周,这对我来说可能真的很愚蠢。我做错了什么?

我建议不要像这样覆盖 AppStart。例如,您不会阻止导航,因此它会在完成设置之前继续。这可能会导致事情处于糟糕的状态。使用:

RegisterAppStart<LoginViewModel>();