Как получить доступ к зарегистрированной службе HttpClient в фабрике реализации лямбда-выражений?C#

Место общения программистов C#
Ответить
Anonymous
 Как получить доступ к зарегистрированной службе HttpClient в фабрике реализации лямбда-выражений?

Сообщение Anonymous »

Я пытался это изучить, но ничего не получилось. Я пытался использовать элементы из других вопросов:
Использование шаблона Factory с внедрением зависимостей ядра ASP.NET
В IServiceProvider, каковы различия между методами GetRequiredService и GetService?
ASP.NET Core DI: разрешить один и тот же экземпляр, если служба с заданной областью зарегистрирована как тип службы, так и тип реализации.
Это немного сбивает с толку, и ни у кого нет примера, который бы точно соответствовал тому, чего я пытаюсь достичь.
У меня есть код, похожий на следующий:
Middleware.cs

Код: Выделить всё

public static IServiceCollection UseAPI(thisIServiceCollection services, string key, string username, bool test = false)
{
services.AddHttpClient(client =>
{
// ... setting BaseAddress based on test, adding auth headers, etc
});
return services.AddScoped(x =>
{
var service = x.GetRequiredService();
var ApiClient client = new ApiClient(service);
client.Configure(key);
return client;
}
}

Program.cs

Код: Выделить всё

services.UseAPI(_settings.Key, _settings.Username, _settings.IsTest);

ApiClient.cs

Код: Выделить всё

public class ApiClient
{
private readonly HttpClient httpClient;
private string Key;
public ApiClient(HttpClient _httpClient)
{
httpClient = _httpClient;
}

public void Configure(string key)
{
Key = key;
}
}

Значение ключа используется как часть процесса создания подписи содержимого и поэтому не может быть добавлено в заголовки по умолчанию. Кажется, я не могу понять, как получить ключ от промежуточного программного обеспечения. Конечно, я могу внедрить конфигурацию и получить ее таким образом, но это непереносимо, и я создаю это как пакет, поэтому идеальным вариантом было бы свести к минимуму зависимость от него.

Подробнее здесь: https://stackoverflow.com/questions/791 ... tion-facto
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»