c# castle-windsor aop castle-dynamicproxy

c# - Aplicando AOP



castle-windsor castle-dynamicproxy (2)

Solo miré castle-windsor por un tiempo corto (todavía) así que no puedo comentar sobre eso pero usé postrabajo.

Postsharp funciona tejiendo en tiempo de compilación. Se anuncia un paso de compilación posterior a su compilación donde modifica su código. El código se compila como si acabara de programar las cuestiones de corte transversal en su código. Esto es un poco más eficiente que el tiempo de ejecución y debido al uso de atributos, Postsharp es muy fácil de usar. Creo que usar atributos para AOP no es tan problemático como usarlo para DI. Pero ese es solo mi gusto personal.

Pero...

Si ya usas Castle para la inyección de dependencia, no veo una buena razón por la cual no deberías usarlo para cosas de AOP. Creo que aunque el AOP en tiempo de ejecución es un poco más lento que en tiempo de compilación, también es más poderoso. En mi opinión, AOP y DI son conceptos relacionados, así que creo que es una buena idea usar un marco para ambos. Así que probablemente revise las cosas del castillo el próximo proyecto Necesito AOP.

He estado usando algunas soluciones básicas de estilo AOP para cuestiones transversales como la seguridad, el registro, la validación, etc. Mi solución ha estado relacionada con Castle Windsor y DynamicProxy. He pasado por esta ruta porque puedo aplicar todo usando un DSL basado en Boo y mantener mi código limpio de atributos. El fin de semana me dijeron que echa un vistazo a PostSharp, ya que se supone que es una solución "mejor". He echado un vistazo rápido a PostSharp, pero el uso de atributos me ha desconcertado.

¿Alguien ha probado ambas soluciones y le gustaría compartir sus experiencias?


Un par de problemas menores con PostSharp ...

Un problema que he tenido con PostSharp es que, al usar asp.net, los números de línea para los mensajes de excepción están ''fuera'' por el número de instrucciones de IL que PostSharp ha inyectado en los ensamblajes, ya que los PDB tampoco se han inyectado :-).

Además, sin los ensamblados PostSharp disponibles en tiempo de ejecución, se producen errores de tiempo de ejecución. Usando Windsor, los cortes cruzados se pueden desactivar en una fecha posterior sin una recompilación de código.

(espero que esto tenga sentido)