Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 22873|Ответ: 0

[Источник] .NET/C# реализует AOP через Autofac и DynamicProxy

[Скопировать ссылку]
Опубликовано 04.11.2017 12:21:23 | | | |
Что такое AOP? Цитата из Baidu-энциклопедии: 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 создаст подкласс прокси-класса целевой класса, и следует отметить, что он перехватывает только виртуальный метод и переопределяет метод

Включить примерный код Interceptor:


Шаг 4: Укажите тип, который хотите перехватить

Есть два способа:

Первый тип: Добавить атрибут признака к типу




Второй тип — динамическое введение перехватчика при передаче регистрационного типа в контейнер


Шаг 5: Проверьте эффект

1. Перехват по прокси



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



2. Перехват прокси интерфейса



Код интерфейса IShape:

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







Предыдущий:Исходный код инструмента закрытия порта VS2010 C#
Следующий:Функция шифрования JS-MD5
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com