Think of AOP as a set of services that are orthogonal to the functionality of your application. If you remember COM+ services, you have the idea of what that might be. There is some container that intercepts calls to your methods that you wish to become serviced. The great benefit of this is that you avoid calls to services from all over your code.
We combined LLBL and Spring.NET in one project. We let Spring.NET intercept calls to DataAccessAdapter in order to:
- gather statistical data (number of reads, writes, average execution time…)
- handle exceptions (log, wrap them up, retry…)
And yes, I think that auditing can be elegantly solved with this technique. And with tighter coupling of those two (LLBL letting Spring.NET create Entity instances), we could have a plethora of useful services built into Entity instances.