Я создаю собственный клиент API, который будет использоваться моими веб-приложениями (Blazor WebAssembly Standalone) и мобильными приложениями (.NET MAUI) для подключения к моему API. У меня есть два вопроса ниже, но сначала приведу сокращенную версию моего кода:
public class MyApiClient : IMyApiClient
{
public async Task GetUser()
{
// Check for Internet connection
if(!IsConnectedToInternet())
throw new Exception("No Internet connection!");
// Call API to get user info
...
}
public virtual bool IsConnectedToInternet()
{
// Requires platform specific implementation
return false;
}
}
public interface IMyApiClient
{
Task GetUser();
bool IsConnectedToInternet();
}
И в Program.cs моего приложения Blazor я внедряю HttpClient в MyApiClient следующим образом:
...
builder.services.AddHttpClient(client => client.BaseAddress = new Uri("https://www.example.com/api"));
...
Мои вопросы:
Где мне создать переопределение, специфичное для веб-приложения для метода IsConnectedToInternet()? Делать это в Program.cs кажется неправильным.
Я хотел бы использовать интерфейс IMyApiClient в Program.cs вместо фактического класса MyApiClient. Где мне зарегистрировать интерфейс IMyApiClient и его реализацию? Справлюсь ли я с этим так же, как с любыми локальными службами и их интерфейсами в приложении Blazor? Например: builder.services.AddSingleton(); в Program.cs? Если да, то важен ли порядок, например? нужно ли мне внедрить HttpClient после регистрации?
Я создаю собственный клиент API, который будет использоваться моими веб-приложениями (Blazor WebAssembly Standalone) и мобильными приложениями (.NET MAUI) для подключения к моему API. У меня есть два вопроса ниже, но сначала приведу сокращенную версию моего кода: [code]public class MyApiClient : IMyApiClient { public async Task GetUser() { // Check for Internet connection if(!IsConnectedToInternet()) throw new Exception("No Internet connection!");
// Call API to get user info ... }
public virtual bool IsConnectedToInternet() { // Requires platform specific implementation return false; } }
public interface IMyApiClient { Task GetUser();
bool IsConnectedToInternet(); } [/code] И в Program.cs моего приложения Blazor я внедряю HttpClient в MyApiClient следующим образом: [code]... builder.services.AddHttpClient(client => client.BaseAddress = new Uri("https://www.example.com/api")); ... [/code] Мои вопросы: [list] [*]Где мне создать переопределение, специфичное для веб-приложения для метода IsConnectedToInternet()? Делать это в Program.cs кажется неправильным. [*]Я хотел бы использовать интерфейс IMyApiClient в Program.cs вместо фактического класса MyApiClient. Где мне зарегистрировать интерфейс IMyApiClient и его реализацию? Справлюсь ли я с этим так же, как с любыми локальными службами и их интерфейсами в приложении Blazor? Например: builder.services.AddSingleton(); в Program.cs? Если да, то важен ли порядок, например? нужно ли мне внедрить HttpClient после регистрации? [/list]