我正在尝试理解如何在.NET MAUI应用程序中实现依赖注入。
我有一个处理我的REST调用的服务类和它的接口,看起来像这样:
public class MyRestApiService : IMyRestApiService
{
public async Task<string> Get()
{
// Do someting
}
}
然后我将此放入我的 DI 容器中,在 MauiProgram.cs
文件中:
builder.Service.AddTransient<IMyRestApiService, MyRestApiService>();
我也有一个视图模型,将在我的 MainPage.xaml
中使用。问题是,如果我对我的服务进行构造函数注入,XAML 似乎不喜欢它。
MainPageViewModel
如下所示:
public class MainPageViewModel : BaseViewModel
{
IMyRestApiService _apiService;
public MainPageViewModel(IMyRestApiService apiService)
{
_apiService = apiService;
}
}
当我尝试将 MainPageViewModel
定义为 MainPage.xaml
的视图模型时,如下所示,我遇到了错误:<ContentPage.BindingContext>
<vm:MainPageViewModel />
</ContentPage.BindingContext>
错误信息如下:
类型 MainPageViewModel 不能用作对象元素,因为它不是公共的,也没有定义公共的无参数构造函数或类型转换器。
我该如何将我的服务注入到视图模型中?
d:ContentPage.BindingContext
属性设置为vm:MainPageViewModel
。虽然它会抱怨无法创建视图模型(因为它没有无参构造函数),但它可以让智能感知再次工作。 - Michal Divišxmlns:vm="clr-namespace:SomeViewModels"
x:DataType ="vm:SomeViewModel"
- Stefan Ott