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

Изглед: 22873|Отговор: 0

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

[Копирай линк]
Публикувано в 4.11.2017 г. 12:21:23 ч. | | | |
Какво е AOP? Цитиране на Baidu Encyclopedia: AOP е съкращението от Aspect Oriented Programming, което означава: технология за програмиране, ориентирано към лице, с цел постигане на унифицирано поддържане на програмните функции чрез методи за предварителна компилация и динамични агенти по време на изпълнение. Има два основни начина за реализиране на 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>Именувани ("лог-calls");

Инжекция на типове
Строител. 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