|
|
Публикувано в 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 в scope1 са един и същ обект, а 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 автоматично ще инжектира текущия диапазон, който след това може да се използва за създаване на вложени обхвати.
Ако искате да го контролирате допълнително, можете да използвате [една екземпляр на съответстващ жизнен цикъл] за свързване на компоненти с обхват на нишки с вътрешни обхвати на жизнения цикъл, както е показано на фигурата:
"Контекстът" в диаграмата е диапазонът на жизнения цикъл, създаден от метода BeginLifetimeScope.
|
Предишен:Ефекти на кликване с мишка на фронтенда: свобода, демокрация, просперитетСледващ:{"error_msg": "Сертификацията на IAM не беше успешна"}
|