Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 22873|Répondre: 0

[Source] .NET/C# implémente AOP via Autofac et DynamicProxy

[Copié le lien]
Publié sur 04/11/2017 12:21:23 | | | |
Qu’est-ce que la POA ? Pour citer l’Encyclopédie Baidu : AOP est l’abréviation de Programmation Orientée aux Aspects, ce qui signifie : une technologie de programmation orientée face afin d’assurer une maintenance unifiée des fonctions du programme via des méthodes de pré-compilation et des agents dynamiques en temps réel. Il existe deux principales façons d’implémenter AOP : l’une est l’implantation statique au moment de la compilation, l’avantage est une grande efficacité, l’inconvénient est le manque de flexibilité, et postsharp sous .net est le représentant (celui-ci est chargé). L’autre méthode est les proxies dynamiques, qui présentent les avantages et inconvénients opposés aux premiers, créant dynamiquement des proxys pour le type cible et les interceptant via des appels proxy. Ce que peut faire AOP, dans les cas d’usage courants, c’est le traitement des transactions, la journalisation, etc. Parlons de la façon dont Autofac implémente AOP, Autofac est un très bon conteneur IOC sous .net et de très bonnes performances (le conteneur le plus efficace sous .net), et AOP est tout simplement un tigre. L’AOP d’Autofac est implémenté via la partie centrale du projet Castle (également un conteneur) appelée Autofac.Extras.DynamicProxy, qui, comme son nom l’indique, est implémenté comme un proxy dynamique.

Préparation avant utilisation :

Installez le paquet Nuget Autofac, Autofac.Extras.DynamicProxy, et trois références seront ajoutées après l’installation réussie


Maintenant, c’est officiellement lancé !



Étape 1 : Créer un intercepteur

Voici un exemple d’intercepteur simple qui affiche le nom de la méthode interceptée, une liste de paramètres et le résultat de retour

Étape 2 : Enregistrer l’intercepteur dans le conteneur Autofac

L’intercepteur doit être enregistré dans le conteneur Aufofac, soit par type d’intercepteur, soit par nom, ce qui rend la méthode d’utilisation de l’intercepteur différente (comme expliqué plus loin).


Injection de noms
constructeur. Register(c => nouveau CallLogger(Console.Out)). <IInterceptor>Nommés (« appels de journal ») ;

Injection de type
constructeur. Register(c = > nouveau CallLogger(Console.Out)) ;


Étape 3 : Activer l’intercepteur

Il existe deux façons principales d’activer l’intercepteur : EnableInterfaceInterceptors(), EnableClassInterceptors().

La méthode EnableInterfaceInterceptors crée dynamiquement un proxy d’interface

La méthode EnableClassInterceptors créera une sous-classe proxy de la classe cible, et il convient de noter ici qu’elle n’interceptera que la méthode virtuelle et la supplantera

Activez le code d’exemple Interceptor :


Étape 4 : Indiquez le type que vous souhaitez intercepter

Il y a deux façons de faire :

Le premier type : Ajouter un attribut de caractéristique au type




Le second type consiste à injecter dynamiquement l’intercepteur lorsque le type d’enregistrement est transféré au conteneur


Étape 5 : Tester l’effet

1. Interception par procuration



Code de classe cercle :



2. Interception de proxy d’interface



Code d’interface IShape :

Code de classe cercle :







Précédent:Code source de l’outil de port fermé VS2010 C#
Prochain:Fonction de chiffrement JS-MD5
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com