Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 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