¿Qué es AOP? Citando la Enciclopedia Baidu: AOP es la abreviatura de Programación Orientada a Aspectos, que significa: una tecnología para programación orientada a la cara para lograr el mantenimiento unificado de funciones del programa mediante métodos de precompilación y agentes dinámicos durante la ejecución. Hay dos formas principales de implementar AOP: una es la implantación estática en tiempo de compilación, la ventaja es la alta eficiencia, la desventaja la falta de flexibilidad, y postsharp bajo .net es el representante (esto se carga). El otro método son los proxies dinámicos, que tienen ventajas y desventajas opuestas a los primeros, creando proxies dinámicamente para el tipo objetivo e interceptándolos mediante llamadas proxy. Lo que AOP puede hacer, casos de uso comunes son el procesamiento de transacciones, el registro, etc. Hablemos de cómo Autofac implementa AOP, Autofac es un contenedor IOC muy bueno en .net y en muy buen rendimiento (el contenedor más eficiente en .net), además AOP es simplemente un tigre. El AOP de Autofac se implementa a través de la parte central del proyecto Castle (también un contenedor) llamada Autofac.Extras.DynamicProxy, que, como su nombre indica, está implementado como un proxy dinámico.
Preparación antes de su uso:
Instala el paquete Nuget Autofac, Autofac.Extras.DynamicProxy y se añadirán tres referencias tras la instalación exitosa
¡Ahora ha empezado oficialmente!
Paso 1: Crear un interceptor
A continuación se muestra un ejemplo de un interceptor simple que muestra el nombre del método interceptado, una lista de parámetros y el resultado de retorno
Paso 2: Registrar el interceptor en el contenedor Autofac
El interceptor debe estar registrado en el contenedor Aufofac, ya sea por tipo de interceptor o por nombre, lo que hace que el método de uso del interceptor sea diferente (como se comenta más adelante).
Inyección de nombres Constructor. Register(c => nuevo CallLogger(Console.Out)). <IInterceptor>Nombrados ("log-calls");
Inyección tipo Constructor. Register(c => nuevo CallLogger(Console.Out));
Paso 3: Activar el interceptor
Hay dos formas principales de habilitar el interceptor: EnableInterfaceInterceptors(), EnableClassInterceptors().
El método EnableInterfaceInterceptors crea dinámicamente un proxy de interfaz
El método EnableClassInterceptors creará una clase proxy de subclase de la clase objetivo, y debe señalarse aquí que solo interceptará el método virtual y anulará el método
Activar código de ejemplo de Interceptor:
Paso 4: Indica el tipo que quieres interceptar
Hay dos maneras:
El primer tipo: Añadir un atributo de característica al tipo
El segundo tipo es inyectar dinámicamente el interceptor cuando el tipo de registro se transfiere al contenedor
Paso 5: Prueba el efecto
1. Intercepción por proxy
Código de clase circular:
2. Intercepción de proxy de interfaz
Código de la interfaz IShape:
Código de clase circular:
|