Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 22873|Risposta: 0

[Fonte] .NET/C# implementa AOP tramite Autofac e DynamicProxy

[Copiato link]
Pubblicato su 04/11/2017 12:21:23 | | | |
Cos'è AOP? Citando Baidu Encyclopedia: AOP è l'abbreviazione di Aspect Oriented Programming, che significa: una tecnologia per la programmazione face-orientata per ottenere la manutenzione unificata delle funzioni del programma tramite metodi di precompilazione e agenti dinamici durante l'esecuzione. Ci sono due modi principali per implementare AOP: uno è l'impianto statico a tempo di compilazione, il vantaggio è l'alta efficienza, lo svantaggio è la mancanza di flessibilità, e postsharp sotto .net è il rappresentante (questo è addebitato). L'altro metodo sono i proxy dinamici, che presentano vantaggi e svantaggi opposti rispetto ai primi, creando dinamicamente proxy per il tipo target e intercettandoli tramite chiamate proxy. Quello che può fare AOP, nei casi d'uso comuni, sono l'elaborazione delle transazioni, la registrazione, ecc. Parliamo di come Autofac implementa AOP, Autofac è un container IOC molto valido sotto .net e ottime prestazioni (il container più efficiente sotto .net), inoltre AOP è semplicemente una tigre. L'AOP di Autofac è implementato attraverso la parte centrale del progetto Castle (anch'esso un container) chiamata Autofac.Extras.DynamicProxy che, come suggerisce il nome, è implementata come proxy dinamico.

Preparazione prima dell'uso:

Installa il pacchetto Nuget Autofac, Autofac.Extras.DynamicProxy e tre riferimenti verranno aggiunti dopo l'installazione con successo


Ora è ufficialmente iniziato!



Passo 1: Creare un intercettore

Di seguito è riportato un esempio di un semplice intercettore che mostra il nome del metodo intercettato, una lista di parametri e il risultato di ritorno

Passo 2: Registra l'intercettore nel container Autofac

L'intercettore deve essere registrato nel container Aufofac, sia per tipo di intercettore sia per nome, il che rende il metodo di utilizzo dell'intercettore diverso (come discusso più avanti).


Iniezione di nomi
muratore. Register(c => nuovo CallLogger(Console.Out)). <IInterceptor>Denominato ("log-calls");

Iniezione di tipo
muratore. Register(c => nuovo CallLogger(Console.Out));


Passo 3: Abilita l'intercettore

Ci sono due modi principali per abilitare l'intercettore: EnableInterfaceInterceptors(), EnableClassInterceptors().

Il metodo EnableInterfaceInterceptors crea dinamicamente un proxy di interfaccia

Il metodo EnableClassInterceptors creerà una classe proxy di sottoclasse della classe target, e va notato che intercetterà solo il metodo virtuale e lo sovrascriverà

Abilita il codice di esempio di Interceptor:


Passo 4: Indica il tipo che vuoi intercettare

Ci sono due modi:

Il primo tipo: Aggiungi un attributo feature al tipo




Il secondo tipo è iniettare dinamicamente l'intercettore quando il tipo di registrazione viene trasferito al contenitore


Passo 5: Testa l'effetto

1. Intercettazione tramite proxy



Codice di classe cerchio:



2. Intercettazione proxy di interfaccia



Codice dell'interfaccia IShape:

Codice di classe cerchio:







Precedente:Codice sorgente dello strumento Close Port VS2010 C#
Prossimo:Funzione di crittografia JS-MD5
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com