Ответ 1
Как и все другие контейнеры DI, он будет располагать экземпляры IDisposable для вас с учетом времени жизни экземпляра.
В вашем заявлении, если экземпляр зарегистрирован как Scoped
(экземпляр на запрос). Он будет удалять этот экземпляр после завершения запроса.
Edit: В официальных документах они не упоминают об этом. Итак, проверьте исходный код:
Когда создается область, ServiceScopeFactory возвращает новый ServiceScope, который зависит от ServiceProvider и одноразового использования.
ServiceProvider
имеет private List<IDisposable> _transientDisposables;
, который сохраняет одноразовые службы, когда TransientCallSite
равен invoke
d в CaptureDisposable
. Кроме того, ServiceProvider
имеет private readonly Dictionary<IService, object> _resolvedServices = new Dictionary<IService, object>();
, который сохраняет все службы для Scoped
.
Когда лифтинг/область заканчивается, расположен ServiceScope
. Затем он располагает ServiceProvider
, который размещает все _transientDisposables
, а затем проверяет _resolvedServices
и удаляет одноразовые службы в словаре в ServiceProvider
.
Изменить (13.06.2017): Сейчас они упоминаются в официальных документах. Утилизация сервисов