Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 22873|Respuesta: 0

[Fuente] .NET/C# implementa AOP mediante Autofac y DynamicProxy

[Copiar enlace]
Publicado en 4/11/2017 12:21:23 | | | |
¿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:







Anterior:Código fuente de la herramienta de cierre de puertos en C# VS2010
Próximo:Función de cifrado JS-MD5
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com