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>();
我正在尝试让我的 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>();