我尝试在。net MAUI的新项目中第一次实现依赖注入。出于测试目的,我想从ViewModel中的本地源获取数据。生产场景将使用HttpClient从远程数据源获取数据。
下面是我的代码基础结构:我有一个接口:
public interface IApiService
{
Task<bool> GetSomething(string parameter);
Task<string> GetSomethingElse(string parameter);
}
我有两个类从它派生。
public class LocalDataStore: IApiService
public class RemoteDataStore: IApiService
在我的MauiProgram.cs中,当我想使用本地数据存储时:
builder.Services.AddSingleton<LocalDataStore>()
builder.Services.AddSingleton<IApiService>()
对于远程数据存储
builder.Services.AddSingleton<RemoteDataStore>()
builder.Services.AddSingleton<IApiService>()
In my ViewModel:
public class Page1ViewModel
{
public Page1ViewModel(IApiService localDataStore)
{
var items = Task.Run(async () => await localDataStore.GetSomething(true));
}
}
在运行应用程序时,我得到一个错误:
系统。InvalidOperationException: '无法解析服务类型'…IApiService'试图激活'ViewModels.Page1ViewModel'.'
我做错了什么,或者我还应该做什么?
请帮助。
Thanks, and regards.
编辑*
当然,如果我使用LocalDataStore或RemoteDataStore而不是IApiService,当我向构建器注册服务时,它可以工作。但如果我必须从一个数据存储更改到另一个,我必须在所有ViewModel类中更改吗?
这是微不足道的。
我需要像这样注册服务:
builder.Services.AddSingleton<<strong> IApiService, LocalDataStore>
();多亏了https://youtu.be/paZNvvUNFi0,我才意识到这一点。
希望这能帮助到一些人。