.net – What Aspect-Oriented Programming (AOP) libraries for .NET are still actively developed

aopnet

I am trying to find a reasonably mature/stable and freely available (preferably open-source) library for doing AOP in .NET. I've been searching around a bit and found the products below; however, most of them seem dead:

  • PostSharp — this is the AOP solution usually recommended for .NET, however it's a commercial product and thus some use restrictions apply. (However, it seems to be sort-of freely available for personal or open-source projects.)

  • Spring.NET — not exclusively about AOP, so it's probably too powerful if one only wants to do AOP. (?)

  • Policy Injection Application Block — being from Microsoft, I would expect this to be at least maintained.

  • Castle Windsor together with DynamicProxy — not primarily an AOP library, but apparently it can be used for that purpose.

  • Aspect# — this seems quite dead to me.

  • Aspect.NET — this also seems quite dead to me.

  • NAop — apparently no longer supported.

  • AOP.NET — this was supposed to be the successor to NAop, and also looks like it died a while ago.

There's probably even more. From the above list I gather that the only real options for doing AOP on .NET is PostSharp (even though it's a commercial product), Spring.NET, Microsoft's Policy Injection Application Block, or perhaps Windsor.

Did I forget any major option?


See also the question Suggestions for open source aspect-oriented library for C# here on StackOverflow. I posted a new question because I'm specifically interested in the state of development/maintenance of various AOP solutions for .NET.

Best Answer

You don't need Windsor to use DynamicProxy. Windsor uses DynamicProxy for its own purposes, just like NHibernate, RhinoMocks, Moq or other libraries/applications/frameworks out there. If you need just runtime AOP, without IoC container, use Caste DynamicProxy alone.

It is actively developed, last pre-release was released 2 weeks ago, final release (v2.5) is expected this month.

Note: In previous versions (up to v2.2) DynamicProxy used to live in its own assembly Castle.DynamicProxy.dll. It was later moved to Castle.Core.dll and now no other assembly is required to use it. Source