В общем, вам нужна фабрика.Как правило, это отдельный класс, который отвечает за управление экземплярами определенного подобного типа вещей и возвращает соответствующий экземпляр на основе какого-либо соглашения или условия.Например, если вы использовали IHttpClientFactory
, вы увидите один в действии.
Поскольку реализация зависит от запроса, вы можете немного обмануть, используя «фабричную» перегрузку AddScoped
:
services.AddScoped<IMyService>(p =>
{
// return either MyServiceA or MyServiceB
});
Параметр p
лямбды на самом деле является экземпляром области действия IServiceProvider
, так что вы можете сделать что-то вроде вытаскивания IHttpContextAccessor
, чтобы посмотреть детали запроса.