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:
|