Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 22873|Antwort: 0

[Quelle] .NET/C# implementiert AOP über Autofac und DynamicProxy

[Link kopieren]
Veröffentlicht am 04.11.2017 12:21:23 | | | |
Was ist AOP? Zitat aus der Baidu-Enzyklopädie: AOP ist die Abkürzung für Aspect Oriented Programming, was bedeutet: eine Technologie für gesichtsorientierte Programmierung, um eine einheitliche Wartung von Programmfunktionen durch Vorkompilierungsmethoden und dynamische Agenten während der Laufzeit zu erreichen. Es gibt zwei Hauptmöglichkeiten, AOP zu implementieren: Die eine ist die statische Implantation zur Kompilierungszeit, der Vorteil ist die hohe Effizienz, der Nachteil ist der Mangel an Flexibilität, und PostSharp unter .NET ist der Repräsentant (das ist aufgeladen). Die andere Methode sind dynamische Proxys, die die gegenteiligen Vor- und Nachteile der ersteren haben, indem sie dynamisch Proxys für den Zieltyp erstellen und diese durch Proxy-Anrufe abfangen. Was AOP kann, sind gängige Anwendungsfälle wie Transaktionsverarbeitung, Logging usw. Lassen Sie uns darüber sprechen, wie Autofac AOP implementiert: Autofac ist ein sehr guter IOC-Container unter .net und sehr leistungsfähig (der effizienteste Container unter .net), außerdem ist AOP einfach ein Tiger. Das AOP von Autofac wird durch den Kernteil des Castle-Projekts (auch ein Container) namens Autofac.Extras.DynamicProxy implementiert, der, wie der Name schon sagt, als dynamischer Proxy implementiert ist.

Zubereitung vor der Anwendung:

Installiere das Nuget-Paket Autofac, Autofac.Extras.DynamicProxy, und nach erfolgreicher Installation werden drei Referenzen hinzugefügt


Jetzt hat es offiziell begonnen!



Schritt 1: Erstellen Sie einen Abfanggerät

Nachfolgend ist ein Beispiel für einen einfachen Interceptor, der den Namen der abgefangenen Methode, eine Liste von Parametern und das Rückgabeergebnis anzeigt

Schritt 2: Registrieren Sie den Abfanger im Autofac-Container

Der Abfanger muss im Aufofac-Container registriert sein, entweder nach Abfangtyptyp oder nach Namen, was die Verwendung des Abfangers unterscheidet (wie später erläutert).


Namensinjektion
Bauherr. Register(c => neuer CallLogger(Console.Out)). Benannt <IInterceptor>("Log-Calls");

Typinjektion
Bauherr. Register(c => neuer CallLogger(Console.Out));


Schritt 3: Aktivieren Sie den Abfangsender

Es gibt zwei Hauptmöglichkeiten, den Interceptor zu aktivieren: EnableInterfaceInterceptors(), EnableClassInterceptors().

Die EnableInterfaceInterceptors-Methode erzeugt dynamisch einen Interface-Proxy

Die EnableClassInterceptors-Methode erstellt eine Unterklasse-Proxy-Klasse der Zielklasse, und es sollte hier beachtet werden, dass sie nur die virtuelle Methode abfängt und die Methode überschreibt

Interceptor-Beispielcode aktivieren:


Schritt 4: Gib den Typ an, den du abfangen möchtest.

Es gibt zwei Möglichkeiten:

Der erste Typ: Fügen Sie dem Typ ein Merkmalsattribut hinzu




Der zweite Typ besteht darin, den Interceptor dynamisch einzuspritzen, wenn der Registrierungstyp auf den Container übertragen wird


Schritt 5: Teste die Wirkung

1. Proxy-Abfang



Kreisklassencode:



2. Schnittstellen-Proxy-Abfang



IShape-Schnittstellencode:

Kreisklassencode:







Vorhergehend:Quellcode des VS2010 C# Close Port Tool
Nächster:JS-MD5-Verschlüsselungsfunktion
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com