在.net MAUI中使用依赖注入中的接口



我尝试在。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,我才意识到这一点。

希望这能帮助到一些人。

最新更新