Há muita implementação de AOP em C #, VB.net. estas são algumas das implementações AOP:
- PostSharp
- Castle DynamicProxy
- LinFu
- LOOM.NET
- Aspect.NET
- Bloco de aplicação de injeção de política da Enterprise Library 3.0
- AspectDNG
- DotSpect (.SPECT)
- O Spring.NET Framework como parte de sua funcionalidade
- Wicca e Phx.Morph
- Uma análise exaustiva das soluções AOSD para .NET está disponível na Twente University
- Seasar.NET
- Aspecto#
- Puzzle.NAspect
- Compor*
- SetPoint
- NConcern .NET AOP Framework
- ...
Qual é a melhor implementação para AOP em .Net? O que devo usar?
Respostas:
Eu acho que Castle Dynamic Proxy é a solução ideal se a interceptação dinâmica puder atender às suas necessidades. Esta estrutura é usada internamente por muitas outras estruturas que desejam oferecer recursos de AOP. Normalmente, a maioria dos contêineres IoC existentes agora fornece alguns mecanismos de interceptação dinâmica (Spring.NET, Castle Windsor, StructureMap, etc.). Se você já trabalha com um contêiner IoC, talvez seja mais fácil ver o que ele propõe.
Se a interceptação dinâmica não pode atender às suas necessidades (entrelaçamento de classes seladas, interceptação de chamadas não virtuais, etc.), então você certamente deseja entrelaçamento estático. PostSharp é a referência neste domínio.
Observe que também existe o Linfu , que pode ser usado para alavancar ambas as modas AOP.
fonte
"Melhor" é subjetivo.
Primeiro, faça uma lista dos recursos de que você precisa, sua arquitetura, etc. Em seguida, procure opções que façam o que você precisa, sem introduzir complexidade desnecessária. Por exemplo, vários são orientados à interface: seu código está atualmente orientado à interface? Caso contrário, PostSharp pode ser uma escolha melhor (sendo integrado nas classes originais). Mas é claro, PostSharp não pode ser configurado em tempo de execução ... cavalos para cursos.
fonte
A melhor maneira de fazer programação orientada a aspectos no .NET é usando técnicas de design bem conhecidas. Por exemplo, ao aplicar os princípios SOLID, você pode obter a flexibilidade e modularidade de que precisa para permitir a adição de interesses transversais. Se você tiver o design correto, poderá até mesmo aplicar a maioria das questões transversais sem qualquer estrutura. É uma falácia pensar que OOP não é adequado para fazer AOP.
Aqui estão algumas dicas:
Quando você tiver as abstrações certas no lugar, adicionar novas preocupações transversais ao sistema é apenas uma questão de escrever uma nova classe de decorador e envolvê-la nas implementações certas. Se as abstrações forem genéricas, você pode envolver um único decorador em torno de um grande grupo de classes (que é exatamente do que trata o AOP).
Embora técnicas como proxies dinâmicos e entrelaçamento de código possam facilitar o trabalho com um aplicativo mal projetado, realmente não há alternativa para um bom design. Mais cedo ou mais tarde você vai se queimar. Isso não significa que a geração dinâmica de proxy e a combinação de código não devam ser usadas. Mas sem um design de aplicativo adequado, mesmo essas técnicas serão apenas marginalmente úteis.
fonte
Não sei sobre o melhor, há muitos frameworks e não há horas suficientes no dia para tentar todos eles.
Eu usei o PostSharp e fiquei agradavelmente surpreso como é fácil começar a usá-lo.
Também examinei o AOP com Castle Windsor e Spring.Net, a abordagem é diferente (tempo de execução vs tempo de compilação). Misturar AOP e IoC parece fazer sentido. Quando você ainda não está usando um desses frameworks, é muito mais trabalhoso começar, mas não deixe que isso o impeça.
Para novos projetos agora, provavelmente usaria Castle Windsor, mas principalmente porque também gostaria de usar IoC. Se eu tivesse que implementar rapidamente o AOP em uma base de código existente, usaria PostSharp.
fonte
Há também injeção de política e interceptação de unidade da Microsoft.
fonte