2009-05-07 17 views
29

En aplicaciones grandes, realmente me gustaría tener las instalaciones AOP integradas. Tal como está en C# lo mejor que puedes hacer es fábricas y RealProxys, PostSharp, ICorDebug, ICorProfiler o frameworks de inyección. No hay una manera integrada y limpia de hacer AOP.AOP incorporado en C#: ¿está en camino?

¿Hay alguna indicación en algún lugar (publicación de blog/discusión interna) que indique que AOP está en camino?

Respuesta

11

La respuesta de Romain cubre (casi :) perfectamente las soluciones actuales. En cuanto al soporte futuro, Anders Hejlsberg tiene previously stated que estaban en espera & ver modo sobre AOP.

Solo podemos esperar que con la reescritura administrada de csc, y un «compilador como servicio», uno pueda conectarse al compilador e inyectar aspectos allí.

+0

¿Ustedes usan AOP nativo en mono? –

+0

No hay nada especial en Mono Wrt AOP. Sin embargo, ya tenemos un compilador administrado, que es fácilmente pirateable, sería un buen punto de partida para tener algo que se sienta más integrado al compilador. –

+1

mira esto, aparentemente no va a suceder http://www.sharpcrafters.com/blog/post/AOP-in-C-Over-Anders-Hejlsberge28099s-Dead-Body!.aspx –

9

No he oído hablar de una "forma integrada y clara de hacer AOP". Pero como dijiste, ya hay muchas "formas limpias de hacer AOP", utilizando marcos maduros y potentes como PostSharp o Castle DynamicProxy.

Usando el BCL, una forma obvia de hacer AOP, con limitaciones bastante fuertes, es usar proxys transparentes y reales, desde la pila .NET Remoting.

Otra forma es confiar en System.Reflection.Emit para generar dinámicamente proxies, como, hum, DynamicProxy de Castle.

Finalmente, también hay otra solución oficial marcada de Microsoft, que vino con el Enterprise Library. Estoy hablando del Policy Injection Application Block. Unity también ofrece algunas capacidades de interceptación que aprovechan PIAB.

+2

PostSharp fue comercial y no es apropiado para ese tipo de biblioteca. –

+1

@aloneguid Estoy bastante seguro de que V1.5 sigue siendo gratis y aún ofrece más capacidades que muchos otros tejedores estáticos. Además, ¿por qué considerarías que algunas bibliotecas pueden ser comerciales y otras no? –

+0

Actualizando el enlace a la documentación de Unity Interception: http://msdn.microsoft.com/en-us/library/ff660891(PandP.20).aspx –

2

Spring.NET ofrece AOP también. Se necesita mucha configuración, pero una vez que está configurado, funciona bien.