Во-первых, временные службы не относятся к сфере услуг . Временные службы обычно принадлежат вашему коду и создаются каждый раз, когда они разрешаются из контейнера. Контейнер не кэширует временные службы.
TService
будет зарегистрирован как Transient ... Для этого я собираюсь внедрить IServiceProvider
в конструктор моего QueueListener
и создать область действия каждого полученного сообщения.
Вам не нужна область для разрешения переходных служб. Даже если вы создаете область, область все еще не управляет / владеет временными службами. Это, например, завершение срока действия области действия не завершает время жизни временных служб.
Вы можете просто использовать IServiceProvider
, введенный в QueueListener
, для разрешения TService
. И каждый разрешенный TService
должен быть уже таким, каким вы хотите
, легкий и не имеющий состояния обработчик полезной нагрузки
Относительно
Документация гласит:
То, что сказано в документе, может быть неактуально сейчас, так как вы не используете сервисы с областью действия Но в случае, если вы хотите узнать причину:
Опасно разрешать службу с заданной областью из одноэлементного.
Синглтон - это особый вид области действия. Синглтон-сервисы создаются и кэшируются в пределах «root» контекста контейнера, который по сути является самим контейнером.
Если вы разрешаете сервис с областью действия из синглтона, время жизни / область действия, в которой разрешается экземпляр сервиса, и кешируется, скорее всего, область "root". Это приводит к проблеме, когда экземпляр службы с областью действия кэшируется внутри контейнера и используется несколькими клиентскими запросами.
Это опасно , поскольку службы с областью действия должны быть
Службы с ограниченным сроком службы (AddScoped) создаются один раз для каждого запроса клиента (соединения).