|
|
Опубліковано 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 провалилася"}
|