Hay mucha implementación de AOP en C #, VB.net. estas son algunas de las implementaciones de AOP:
- PostSharp
- Castillo DynamicProxy
- LinFu
- LOOM.NET
- Aspect.NET
- Bloque de aplicación de inyección de políticas Enterprise Library 3.0
- AspectDNG
- DotSpect (.SPECT)
- El Spring.NET marco como parte de su funcionalidad
- Wicca y Phx.Morph
- Un análisis exhaustivo de las soluciones AOSD para .NET está disponible en la Universidad de Twente.
- Seasar.NET
- Aspecto#
- Puzzle.NAspect
- Componer*
- Punto fijo
- Marco NConcern .NET AOP
- ...
¿Cuál es la mejor implementación para AOP en .Net? ¿Qué debo usar?
Respuestas:
Creo que Castle Dynamic Proxy es la solución a elegir si la intercepción dinámica puede satisfacer sus necesidades. Este marco lo utilizan internamente muchos otros marcos que desean ofrecer capacidades de AOP. Por lo general, la mayoría de los contenedores de IoC existentes ahora proporcionan algunos mecanismos de interceptación dinámica (Spring.NET, Castle Windsor, StructureMap, etc.). Si ya trabaja con un contenedor de IoC, tal vez sea más fácil ver lo que propone.
Si la interceptación dinámica no puede satisfacer sus necesidades (tejer una clase sellada, interceptar llamadas no virtuales, etc.), entonces sin duda desea un tejido estático. PostSharp es la referencia en este dominio.
Tenga en cuenta que también existe Linfu , que se puede utilizar para aprovechar ambas modas de AOP.
fuente
"Lo mejor" es subjetivo.
Primero, elabore una lista de las características que necesita, su arquitectura, etc. Luego, busque opciones que hagan lo que necesita, sin introducir una complejidad innecesaria. Por ejemplo, varios están orientados a la interfaz: ¿su código actualmente está orientado a la interfaz? Si no es así, PostSharp podría ser una mejor opción (incorporarse a las clases originales). Pero, por supuesto, PostSharp no se puede configurar en tiempo de ejecución ... caballos para cursos.
fuente
La mejor manera de hacer programación orientada a aspectos en .NET es utilizando técnicas de diseño bien conocidas. Por ejemplo, al aplicar los principios SOLID puede lograr la flexibilidad y modularidad que necesita para permitir agregar preocupaciones transversales. Si tiene el diseño correcto, incluso podrá aplicar la mayoría de las preocupaciones transversales sin ningún marco. Es una falacia pensar que la POO no es adecuada para hacer AOP.
Aquí hay algunos consejos:
Cuando tiene las abstracciones correctas en su lugar, agregar nuevas preocupaciones transversales al sistema es solo una cuestión de escribir una nueva clase de decorador y envolverla en las implementaciones correctas. Si las abstracciones son genéricas, puede envolver un solo decorador alrededor de un gran grupo de clases (que es exactamente de lo que se trata AOP).
Aunque las técnicas como los proxies dinámicos y el tejido de código podrían facilitar el trabajo con una aplicación mal diseñada, realmente no hay alternativa para un buen diseño. Tarde o temprano te quemarás. Sin embargo, esto no significa que no se deba utilizar la generación dinámica de proxy y el tejido de código. Pero sin un diseño de aplicación adecuado, incluso esas técnicas serán de utilidad marginal.
fuente
No sé cuál es la mejor, hay muchos frameworks y no hay suficientes horas en el día para probarlos todos.
Usé PostSharp y me sorprendió gratamente lo fácil que es comenzar a usarlo.
También miré en AOP con Castle Windsor y Spring.Net, el enfoque es diferente (tiempo de ejecución frente a tiempo de compilación). La combinación de AOP e IoC parece tener sentido. Cuando aún no está utilizando uno de estos marcos, es mucho más trabajo comenzar, pero no deje que eso lo detenga.
Para nuevos proyectos, probablemente usaría Castle Windsor, pero eso se debe principalmente a que también me gustaría usar IoC. Si tuviera que implementar rápidamente AOP en una base de código existente, usaría PostSharp.
fuente
También hay Policy Injection e Unity Interception de Microsoft.
fuente