2011-04-08 15 views

Respuesta

29

Puede probar varios contenedores COI que cuentan con AOP fuera de la caja (por ejemplo Spring.Net tiene un poderoso Freamework AOP, el castillo de Windsor tiene Interceptors y también lo hace Unity), utilice Snap con los o utilizar un IL-Weaver como Postsharp.

actualización Me acabo de enterar de "Afterthought", que - si bien temprano en el desarrollo - parece prometedor. Su objetivo es ser una alternativa de OpenSource a Postsharp.

Y se me olvidó mencionar Mono.Cecil que es capaz de IL tejer así:

En Inglés sencillo, con Cecil, puede cargar ensamblados administrados existente, navegar por todos los tipos contenidos, modificar sobre la marcha y guarde nuevamente en el disco el ensamblaje modificado.

Fody usa Cecil para tejer y permite integrar ese paso en la fase de construcción. Viene con algunos complementos convenientes (por ejemplo, implementa INotifyPropertyChanged o genera un método ToString de propiedades públicas después de la compilación).

5
+0

+1 para PostSharp, es muy potente y muy fácil de usar –

8

Hace años que busco exactamente lo mismo y puedo decir con confianza que no hay nada en .Net que sea ni remotamente comparable con AspectJ en todos los aspectos.

En el mundo .net, encuentro que el proxy dinámico se usa a menudo como mecánico de AOP. Hay solo unas pocas herramientas que soportan el tejido de IL real, como Postsharp y Afterthoughts, ambos encuentran una programación declarativa con atributos como una forma de hacer Orientación de aspecto. Ambos son fáciles de usar, pero si vienes del fondo AOP (AspectJ), no estoy seguro de que sean lo que llamarías AOP.

Hasta ahora no he visto ninguna implementación .Net del patrón de AOP "verdadero" (definido formalmente hace una década, es decir, puntos, puntos de unión, consejos, aspectos, etc.), probablemente porque hay muy poca conciencia e interés en AOP en general, donde su uso común generalmente se limita al registro, a la gestión de transacciones y a la política de excepción, donde el IoC y los atributos suelen ser suficientes.

AOP para el código de dominio empresarial y el código de dominio todavía se ve muy raramente (ni es compatible con ninguna herramienta) en esta etapa en .Net.

Hay un solo proyecto de código abierto con el que me he encontrado recientemente que parece comenzar a llenar este vacío (http://sheepaop.codeplex.com), todavía parece muy temprano, pero parece prometedor como una implementación de AspectJ-ish. Como dije antes, todavía no se puede comparar con AspectJ (según su pregunta), pero la coincidencia es muy evidente y parece deliberada.

2

Como la pregunta es sobre .NET, puede usar el lenguaje Nemerle, que tiene poderosas funciones de meta-programación.

+1

Nemerle también permite compilar la fuente C# con atributos de macro. De esta manera puede obtener AOP con C#. –

+0

¿Eso significa que el compilador de Nemerle incluye el compilador de C#? – ironic

+0

Sí, Nemerle puede analizar la fuente C# y compilarla. Puede agregar archivos .cs a su proyecto y funciona. Sin embargo, puedes escribir cualquier interfaz del compilador de Nemerle, como VB.Net, la fuente está aquí: https://github.com/rsdn/nemerle/tree/master/snippets/csharp-parser –

Cuestiones relacionadas