我正在尝试使用 .Net Maui、AppShell 和依赖注入技术。
我试图调用一个带有 ViewModel 参数的构造函数来打开一个页面。
该构造函数如下:
在我的MauiProgram.cs文件中,我同时注册了页面和VM。
我试图调用一个带有 ViewModel 参数的构造函数来打开一个页面。
该构造函数如下:
public AuthenticationPage(AuthenticationViewModel viewModel)
{
InitializeComponent();
BindingContext = viewModel;
}
在我的MauiProgram.cs文件中,我同时注册了页面和VM。
builder.Services.AddSingleton<AuthenticationViewModel>();
builder.Services.AddSingleton<AuthenticationPage>();
我的 App.xaml.cs 文件如下:
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new AppShell();
}
}
我的 AppShell.xaml 看起来像这样:
<Shell xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:pages="clr-namespace:DeepBlue.Pages"
xmlns:auth="clr-namespace:DeepBlue.Pages.Authentication"
x:Class="DeepBlue.AppShell">
<!-- Login and Registration Page -->
<ShellContent Route="login"
ContentTemplate="{DataTemplate auth:AuthenticationPage}">
</ShellContent>
<!-- Main Page -->
<FlyoutItem Route="main"
FlyoutDisplayOptions="AsMultipleItems">
<ShellContent Route="dashboard"
ContentTemplate="{DataTemplate pages:DashboardPage}"
Title="Home" />
</FlyoutItem>
</Shell>
现在当我执行我的项目时,我得到了以下错误:
System.MissingMethodException: '未为类型“DeepBlue.Pages.Authentication.AuthenticationPage”定义无参构造函数。'
请问为什么依赖注入在这种情况下不起作用?
如果我不实现AppShell,一切都能正常运行...... 我可以通过从我的App.xaml.cs注入来调用AuthenticationPage作为MainPage,如下所示:
public App(AuthenticationPage page)
{
InitializeComponent();
MainPage = page
}
谢谢,Phil