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

Вид: 22873|Відповідь: 0

[Джерело] .NET/C# реалізує AOP через Autofac та DynamicProxy

[Копіювати посилання]
Опубліковано 04.11.2017 12:21:23 | | | |
Що таке AOP? Цитата з Baidu Encyclopedia: AOP — це скорочення від Аспектно-орієнтованого програмування, що означає: технологія для програмування на обличчя для досягнення єдиного підтримки функцій програми через методи попередньої компіляції та динамічних агентів під час виконання. Існує два основні способи реалізації AOP: один — статична імплантація під час компіляції, перевага — висока ефективність, недолік — відсутність гнучкості, а postsharp під .net є репрезентативним (це платно). Інший метод — це динамічні проксі, які мають протилежні переваги та недоліки, динамічно створюючи проксі для цільового типу та перехоплюючи їх через проксі-дзвінки. Що може зробити AOP, типові випадки використання — це обробка транзакцій, ведення логів тощо. Давайте поговоримо про те, як Autofac реалізує AOP, Autofac — це дуже хороший IOC-контейнер під .net і дуже хороша продуктивність (найефективніший контейнер у .net), плюс AOP — це просто тигр. AOP Autofac реалізовано через основну частину проєкту Castle (також контейнерний) під назвою Autofac.Extras.DynamicProxy, який, як випливає з назви, реалізований як динамічний проксі.

Підготовка перед використанням:

Встановіть пакет Nuget Autofac, Autofac.Extras.DynamicProxy, і після успішної установки буде додано три посилання


Тепер це офіційно почалося!



Крок 1: Створіть перехоплювач

Нижче наведено приклад простого перехоплювача, який відображає назву перехопленого методу, список параметрів і результат повернення

Крок 2: Зареєструйте перехоплювач у контейнері Autofac

Перехоплювач має бути зареєстрований у контейнері Aufofac — за типом перехоплювача або за назвою, що робить спосіб використання перехоплювача іншим (як буде розглянуто далі).


Введення назви
Будівельник. Register(c => новий CallLogger(Console.Out)). <IInterceptor>Названі ("лог-дзвінки");

Типове введення
Будівельник. Register(c => новий CallLogger(Console.Out));


Крок 3: Увімкніть перехоплювач

Існує два основних способи активації перехоплювача: EnableInterfaceInterceptors(), EnableClassInterceptors().

Метод EnableInterfaceInterceptors динамічно створює проксі інтерфейсу

Метод EnableClassInterceptors створює проксі-клас підкласу цільового класу, і слід зазначити, що він лише перехоплюватиме віртуальний метод і перезапише метод

Увімкнути зразковий код перехоплювачів:


Крок 4: Вкажіть тип, який хочете перехопити

Є два способи:

Перший тип: Додати атрибут ознаки до типу




Другий тип — це динамічне введення перехоплювача при передачі реєстраційного типу в контейнер


Крок 5: Перевірте ефект

1. Проксі перехоплення



Код класу кола:



2. Перехоплення проксі інтерфейсу



Код інтерфейсу IShape:

Код класу кола:







Попередній:Вихідний код інструменту закриття порту VS2010 C#
Наступний:Функція шифрування JS-MD5
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com