2009-05-07 4 views
29

Nelle app di grandi dimensioni mi trovo davvero a desiderare di avere strutture AOP integrate. Così com'è in C# il meglio che puoi fare è fabbriche e RealProxys, PostSharp, ICorDebug, ICorProfiler o framework di iniezione. Non esiste un modo integrato pulito di fare AOP.AOP integrato in C#: è in arrivo?

C'è qualche indicazione ovunque (post di blog/discussione interna) che indica che AOP è in arrivo?

risposta

11

La risposta di Romain copre (quasi :) perfettamente le soluzioni attuali. Per quanto riguarda il supporto futuro, Anders Hejlsberg ha che erano in attesa & vedere la modalità su AOP.

Possiamo solo sperare che con la riscrittura gestita di csc e un «Compilatore come servizio», uno possa inserire il compilatore e iniettare gli elementi lì.

+0

Ragazzi fate AOP nativo in mono? –

+0

Non c'è niente di speciale in Mono wr AOP. Abbiamo già un compilatore gestito, che è facilmente hackerabile, sarebbe un buon punto di partenza per avere qualcosa che si sente più integrato al compilatore. –

+1

verificarlo, apparentemente non succederà http://www.sharpcrafters.com/blog/post/AOP-in-C-Over-Anders-Hejlsberge28099s-Dead-Body!.aspx –

9

Non ho mai sentito parlare di un "metodo integrato pulito di fare AOP". Ma come hai affermato, ci sono già molti "modi puliti per fare AOP", usando framework maturi e potenti come PostSharp o Castle DynamicProxy.

Utilizzando il BCL, un modo ovvio per eseguire AOP, con limitazioni piuttosto forti, è quello di utilizzare proxys trasparenti e reali, dallo stack di .NET Remoting.

Un altro modo è affidarsi a System.Reflection.Emit per generare dinamicamente proxy, come, hum, DynamicProxy da Castle.

Infine, c'è anche un'altra soluzione ufficiale contrassegnata da Microsoft, fornita con lo Enterprise Library. Sto parlando dello Policy Injection Application Block. Unity offre anche alcune funzionalità di intercettazione che sfruttano PIAB.

+2

PostSharp è diventato commerciale e non è appropriato per questo tipo di libreria. –

+1

@aloneguid Sono abbastanza sicuro che la V1.5 rimanga libera e offra ancora più capacità di molti altri tessitori statici. Inoltre, perché dovresti considerare che alcune librerie possono essere commerciali e altre no? –

+0

Aggiornamento del collegamento alla documentazione di Unity Interception: http://msdn.microsoft.com/en-us/library/ff660891(PandP.20).aspx –

2

Spring.NET fornisce AOP pure. Ci vuole molta configurazione ma una volta impostato funziona bene.