Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 20252|Отговор: 1

[Източник] Обхватът на инстанцията на компонента autofac

[Копирай линк]
Публикувано в 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.





Предишен:Ефекти на кликване с мишка на фронтенда: свобода, демокрация, просперитет
Следващ:{&quot;error_msg&quot;: &quot;Сертификацията на IAM не беше успешна&quot;}
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com