【发布时间】:2021-12-23 18:52:29
【问题描述】:
我像这样注册了我的视图模型和 DialogMessage 服务:
public App()
{
InitializeComponent();
DependencyService.Register<IDialogMessage, DialogMessage>();
DependencyService.Register<SignInViewModel>();
MainPage = new AppShell();
}
SignInViewModel 的构造函数中注入了 DialogMessage 服务
public SignInViewModel(IDialogMessage dialogMessage)
{
_dialogMessage = dialogMessage;
}
现在,我想通过注入将 SignInViewModel 设置为 SignInView 的绑定上下文在其代码后面的类中:
public SignInPage()
{
InitializeComponent();
BindingContext = DependencyService.Resolve<SignInViewModel>();
}
然而,这会导致以下异常:
在 System.RuntimeType.CreateInstanceMono 中找不到类型 AppName.ViewModels.SignInViewModel 的默认构造函数(System.Boolean nonPublic,System.Boolean wrapExceptions
如何将 SignInViewModel 注入到绑定上下文以及将 DialogMessage 服务注入到 SignInViewModel?
【问题讨论】:
-
我认为 Xamarin.Forms 本身不提供依赖构造函数,因此您需要修改构造函数以接受 0 参数并使用
DependencyService解决依赖关系 -
继续该评论:添加无参数构造函数后,代码将类似于
var vm = DependencyService.Resolve<SignInViewModel>(); vm.DialogMessage = dialogMessage; BindingContext = vm;您将必须提出适当的“dialogMessage”,这对于传递给该虚拟机是有意义的。
标签: c# xamarin xamarin.forms dependency-injection