Я работаю над проектом Blazor, и чтобы облегчить понимание вопроса, можно сказать, что я использую два разных сервиса, которые обрабатывают часть аутентификации. Они регистрируются в методе запуска configureservices вместе с именованным httpclient.
services.AddHttpClient("XBOWServicesApi", c =>
{
c.BaseAddress = new Uri(XBOWServicesApi);
});
services.AddSingleton<IService1, Service1>();
services.AddSingleton<IService2, Service2>();
Служба 1: охватывает все функции, доступные в REST Api. Он использует http-клиент, который устанавливается в конструкторе через экземпляр httpclientfactory. Это должно быть установлено с помощью baseurl и заголовка Auth для работы.
public Service1(IHttpClientFactory clientFactory)
{
this.httpClient = clientFactory.CreateClient("XBOWServicesApi");
}
Служба 2: обрабатывает функцию входа / выхода из системы с использованием пользовательского AuthenticationStateProvider. У него есть собственный httpclient, так что я могу установить заголовок аутентификации для http-клиента. Конструктор работает так же, как и для Сервиса 1.
public Service2(IHttpClientFactory clientFactory)
{
this.httpClient = clientFactory.CreateClient("XBOWServicesApi");
}
Причина такой сборки, конечно, в том, что мне нравится использовать один и тот же http-клиент, поэтому, когда он задан при входе / выходе из системы Методы, служба 1 будет иметь правильный заголовок аутентификации при взаимодействии с API.
Однако фабрика клиентов предоставляет новый экземпляр каждый раз, так что это никогда не будет работать.
Любые идеи, как обращаться это?
/ Хенрик