.NET: как мне настроить статический доступ к одной из моих собственных служб с ограниченной областью действия?

#.net #dependency-injection

#.net #внедрение зависимостей

Вопрос:

Я нахожусь в процессе интеграции с ASP.NET Абстракция управления функциями с использованием a FeatureFilter . Одним из его ограничений является то, что он регистрируется как одноэлементный.

Это означает, что для доступа к данным из моих собственных служб с ограниченной областью действия, я должен иметь возможность разрешать их способом, аналогичным тому, как HttpContext можно разрешить с помощью HttpContextAccessor .

Существуют ли какие-либо известные ресурсы или методы, которым я могу следовать, чтобы настроить свои собственные службы с ограниченной областью запросов, которые я хочу вызывать в своей FeatureFilter реализации со статической областью?

Ответ №1:

Подход, который мы используем, заключается в прокси-вызове метода через DispatchProxy, который разрешит фактическую зависимость (например, типизированный HTTP-клиент) от IServiceProvider и прокси-вызов этого экземпляра.

Реализация здесь: https://github.com/rwkarg/DependencyResolvingProvider

В качестве примера у нас есть существующий компонент обработки сообщений, который реализует IHostedService (то есть один экземпляр), но если для обработки сообщений требуется вызов HttpClient, то этот клиент должен быть разрешен для каждого сообщения, чтобы HttpClientFactory мог управлять временем жизни базовых экземпляров HttpClient.