|
|
Опубликовано 14.09.2018 13:22:21
|
|
|
|

Область действия экземпляра определяет, как сервисы разделяются между запросами.
Оригинальный адрес:http://docs.autofac.org/en/latest/lifetime/instance-scope.html
Один экземпляр на зависимость
С этой опцией новый экземпляр возвращается каждый раз при запросе сервиса. Используйте InstancePerDependency(). Это стандартный вариант. Код ниже, строки 2 и 3 эквивалентны.
Следующий код генерирует новый экземпляр для каждого цикла, всего 100 экземпляров.
Одиночный экземпляр
Используйте эту опцию, чтобы запросить сервис либо в корневой, либо в вложенной области, оба возвращают один и тот же экземпляр. Используйте SingleInstance() для указания.
В коде ниже w1 и w2 всегда являются одним и тем же объектом, и существует только один экземпляр класса Worker в 100 циклах.
Один экземпляр на цель жизненного цикла
Используйте эту опцию, чтобы запросить сервис в определённом ILifetimeScope, возвращая только один экземпляр. Используйте InstancePerLifetimeScope(). В следующем коде 100 умноженных на w1 в области 1 — это один и тот же объект, а 100 умноженных на w2 в scope2 — один и тот же объект, но w1 и w2 — не один и тот же объект.
Один экземпляр на диапазон жизненного цикла сопоставления
Похоже на [один экземпляр на жизненный цикл] выше, но с большим контролем. Используйте эту опцию, чтобы объект ILifetimeScope получил тег. В диапазоне командного матча есть только один случай. Используйте метод InstancePerMatchingLifetimeScope().
В коде ниже w1 и w2 одинаковы, w3 и w4 одинаковы, но w1 и w3 разные.
При парсинге необходимо предоставить соответствующую разметку, и следующий код выдает исключение.
Один экземпляр на запрос
Некоторые приложения естественным образом имеют семантику запроса, например, ASP.NET MVC или WebForm. [Один экземпляр на запрос] реализуется на основе [один экземпляр на соответствующий жизненный цикл], предоставляя маркеры области действия, функции регистрации и интеграцию общих типов. По сути, [один экземпляр на каждый соответствующий жизненный цикл].
ASP.NET Core использует один экземпляр на каждый жизненный цикл, а не один экземпляр на запрос.
Один экземпляр на каждый владение
<T> Тип неявной ассоциации Owned создаёт вложенные диапазоны жизненного цикла. С регистрацией по экземпляру на владение можно ограничить зависимости только принадлежащими экземплярами.
В этом случае сервис ServiceForHandler ограничен областью действия экземпляра MessageHandler.
Диапазон резьбы
Autofac может заставить объекты потока A не удовлетворять зависимости потока B.
Тогда пусть каждый создаёт свой собственный срок службы
Важно: В многопоточной ситуации будьте осторожны, чтобы не убрать родительский прицел.В противном случае подскопы в производном потоке не смогут разрешить сервис.
Каждый поток будет иметь свой собственный экземпляр MyThreadScopedComponent, который по сути является одиночной системой с ограничением жизненного цикла. Экземпляры в области не предоставляются внешне, поэтому легко держать компоненты изолированными между потоками.
Добавив параметр ILifetimeScope, родительский диапазон можно внедрить в код, генерирующий поток, и Autofac автоматически внедрит текущий диапазон, который затем можно использовать для создания вложенных областей.
Если хотите контролировать её дальше, можно использовать [один экземпляр на соответствующий диапазон жизненного цикла], чтобы связать компоненты с объёмом потоков с внутренними областью видимости жизненного цикла, как показано на рисунке:
«Context» на диаграмме — это диапазон жизненного цикла, созданный методом BeginLifetimeScope.
|
Предыдущий:Эффекты клика мыши на фронтенде: свобода, демократия, процветаниеСледующий:{"error_msg": "Сертификация IAM провалилась"}
|