2009-10-07 5 views
8

In vari progetti con cui ho lavorato, abbiamo dovuto utilizzare un framework di iniezione AOP o dipendenza.Best Aspect Oriented Framework per funzionalità/build performance in .net

Abbiamo utilizzato Enterprise LIbrary, Unity e PostSharp.

Per ora, Postsharp è la mia scelta migliore quando si tratta della flessibilità. Capisco come generare i miei aspetti.

L'unico problema è il tempo di compilazione richiesto dopo l'installazione di PostSharp. I miei sviluppatori non amano pagare le imposte sul tempo nemmeno per quanto riguarda tutta la divinità proveniente da PostSharp.

Quindi la mia domanda è: Quale framework AOP consiglieresti per il tempo di compilazione rapido e la grande funzionalità?

Grazie, le vostre risposte sono molto apprezzate,

Patrick

risposta

7

PostSharp è fondamentalmente un weaver statico completo. Ciò significa che la tessitura avviene durante il processo di costruzione, in una fase di post-compilazione. E sicuramente, ci vorrà del tempo. (Assicurati di leggere l'annuncio Gael su runtime performance improvements e build time performance improvements che verrà fornito con la versione 2.0)

Se non vuoi sovraccaricare il tempo di costruzione, esiste una sola soluzione: utilizzare tessitori dinamici. In .NET esistono diversi framework di intercettazione come Castle.DynamicProxy o Linfu.DynamicProxy. Generano proxy in fase di runtime. Essere consapevoli del fatto che questi framework non possono fare quanto un framework AOP statico come PostSharp e possono anche funzionare in modo meno efficiente in fase di runtime. Molto spesso, i quadri IoC offrono capacità dinamiche di intercettazione (Spring.NET, Unity, Windsor, etc.)

Un'altra soluzione è quella di guardare ai tessitori ibride, che tesse solo unire punti durante il processo di compilazione, in modo statico, e quindi ti consente di applicare l'aspetto in modo dinamico al runtime. Linfu.AOP, che usa Mono.Cecil come back-end, funziona così.

0

Spring.NET non fa uso di tessitura e si basa su un framework Java AOP molto stabile. Here è l'indirizzo del progetto.