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

Ansehen: 21364|Antwort: 1

[Quelle] .net/C# verwendet Attribute, um einfaches AOP zu implementieren

[Link kopieren]
Veröffentlicht am 18.04.2017 14:54:11 | | |

Fangen wir mit einem einfachen Codesatz an:



Angenommen, es handelt sich um ein Webprogramm: Wir wollen zuerst die Sitzung überprüfen, dann die Berechtigungen prüfen, eine Transaktion starten, ein Log schreiben, dann die Operation selbst ausführen und schließlich ein Protokoll schreiben. Offensichtlich können wir nicht alle Methodenaufrufe zu den oben genannten Operationen in DoSomething() schreiben, daher wird der Code zu einem großen Miststück – was sollen wir also tun?

Es gibt viele Möglichkeiten, es zu implementieren, zum Beispiel durch Frameworks wie Spring, aber in tatsächlichen Projekten ist es nicht möglich, ein Framework locker einzuführen, und oft müssen wir einige Mechanismen selbst schreiben.

Hier denke ich an den Filter in MVC: Solange du einen Attribut-Tag auf den Controller oder die Aktion setzt, kannst du vor und nach der Ausführung der Methode noch andere Dinge tun. Simulieren wir also einfach eine Filterimplementierung.

Zunächst wird die ursprüngliche Methode in eine elegante Art von Merkmalsbezeichnungen umgewandelt:




Bei Feature-Tags muss es Klassen geben, die Feature-Tags entsprechen, sowie AOP-Implementierungen, die unabhängig in einer Datei oder Assembler enthalten sein können.

Zuerst das an die Methode angehängte Label, implementiert als leer:

//贴在方法上的标签
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
öffentliche versiegelte Klasse MyInterceptorMethodAttribute : Attribute { }
Danach definieren Sie das Label, das an die Klasse angehängt werden soll:




Hier ist eine MyAopHandler-Klasse definiert, implementiert wie folgt:




Beachten Sie, dass der spezifische Operationsteil des oben genannten Codes einer "Proxy-Klasse" entspricht, die im Wesentlichen den Kontext der Methodenausführung verändert. Objektorientierte Programmstrukturen wie Delegierte können genutzt werden, um die spezifische Implementierung der Außenwelt zur sekundären Entwicklung zugänglich zu machen.




Vorhergehend:ES5, ES6, ES2016, ES. Als Nächstes: Was ist mit der Version von Javascrip{filter}t los?
Nächster:PowerShell Einstiegsanleitung – Version v0.3
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