Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 22873|Odpowiedź: 0

[Źródło] .NET/C# implementuje AOP za pomocą Autofac i DynamicProxy

[Skopiuj link]
Opublikowano 04.11.2017 12:21:23 | | | |
Czym jest AOP? Cytując Baidu Encyclopedia: AOP to skrót od Aspect Oriented Programming, co oznacza: technologię programowania zorientowanego na twarze, mającą na celu ujednolicone utrzymanie funkcji programu poprzez metody prekompilacji i dynamiczne agenty w czasie działania. Istnieją dwa główne sposoby implementacji AOP: jeden to statyczna implantacja w momencie kompilacji, zaletą jest wysoka wydajność, wadą brak elastyczności, a postsharp pod .net jest reprezentantem (jest to opłata). Drugą metodą są dynamiczne proxy, które mają przeciwne zalety i wady od pierwszej, dynamicznie tworząc proxy dla typu celu i przechwytując je za pomocą wywołań proxy. Co AOP potrafi, to typowe przypadki użycia to przetwarzanie transakcji, logowanie itd. Porozmawiajmy o tym, jak Autofac implementuje AOP – Autofac to bardzo dobry kontener IOC pod .net i bardzo dobra wydajność (najefektywniejszy kontener pod .net), a AOP to po prostu tygrys. AOP Autofac jest implementowany poprzez rdzeń projektu Castle (również kontener) o nazwie Autofac.Extras.DynamicProxy, który, jak sama nazwa wskazuje, jest zaimplementowany jako dynamiczny proxy.

Przygotowanie przed użyciem:

Zainstaluj pakiet Nuget Autofac, Autofac.Extras.DynamicProxy, a po pomyślnej instalacji zostaną dodane trzy referencje


Teraz oficjalnie się rozpoczęło!



Krok 1: Stwórz przechwytującego

Poniżej znajduje się przykład prostego przechwytywacza, który wyświetla nazwę przechwyconej metody, listę parametrów oraz wynik zwrotny

Krok 2: Zarejestruj przechwytującego w kontenerze Autofac

Przechwytujący musi być zarejestrowany w kontenerze Aufofac, albo według typu przechwytywacza, albo nazwy, co różni sposób użycia przechwytującego (jak omówiono później).


Wstrzykiwanie nazw
Budowniczcie. Register(c => nowy CallLogger(Console.Out)). Nazwa <IInterceptor>("log-calls");

Wtrysk typów
Budowniczcie. Register(c => nowy CallLogger(Console.Out));


Krok 3: Włącz przechwytującego

Istnieją dwa główne sposoby włączenia interceptora: EnableInterfaceInterceptors(), EnableClassInterceptors().

Metoda EnableInterfaceInterceptors dynamicznie tworzy proxy interfejsu

Metoda EnableClassInterceptors tworzy klasę proxy podklasy klasy docelowej i należy zauważyć, że przechwytuje tylko metodę wirtualną i nadpisuje ją

Włącz przykładowy kod Interceptora:


Krok 4: Wskaż typ, który chcesz przechwycić

Są dwa sposoby:

Pierwszy typ: Dodaj atrybut cechowy do typu




Drugi typ polega na dynamicznym wstrzykiwaniu przechwytywacza, gdy typ rejestracji jest przekazywany do kontenera


Krok 5: Sprawdź efekt

1. Przechwycenie przez zastępstwo



Kod klasy kołowej:



2. Przechwytywanie przez interfejs proxy



Kod interfejsu IShape:

Kod klasy kołowej:







Poprzedni:Kod źródłowy narzędzia Close Port VS2010 C#
Następny:Funkcja szyfrowania JS-MD5
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com