Mi collego al post di Antonio di Motta per segnalare questo framework, una serie di link e fare il punto di quanto ne so su AOP.

Per dare una definizione breve (Wikipedia):

Aspect-oriented programming (AOP) is a programming paradigm that increases modularity by allowing the separation of cross-cutting concerns.
Separation of concerns entails breaking down a program into distinct parts (so-called concerns, cohesive areas of functionality). All programming paradigms support some level of grouping and encapsulation of concerns into separate, independent entities by providing new abstractions (e.g. procedures, modules, classes, methods) that can be used to represent these concerns. But some concerns defy these forms of encapsulation and are called crosscutting concerns because they "cut across" multiple abstractions in a program.

In pratica è una modalità differente di concepire la struttura del software. Esistono dei concetti (aspetti) molto trasversali, rispetto al dominio applicativo. Mi vengono in mente tracing, logging, gestione delle eccezioni, gestione della sicurezza... solo per citarne alcuni.
In un classico approccio OO prevederemmo le nostre classi (o componenti/servizi se volessimo riutilizzare quanto già sviluppato) e, ovunque volessimo "curare" questi aspetti, inseriremmo chiamate a metodi di questi oggetti. Seguendo questo approccio si "sporcherebbe" la logica applicativa del nostro dominio con aspetti che non c'entrano molto con esso.

La programmazione orientata agli aspetti serve a separare maggiormente i concetti cross-cutting dal dominio applicativo, semplificando l'ancoraggio di questi aspetti al dominio in modo molto discreto e poco invasivo. Mi vengono in mente, per parlare di .Net, gli attributi custom o inversione di controllo; le modalità di inserimento di queste ancore potrebbero essere molteplici. Dipende tutto dal framework utilizzato o dalla propria fantasia.

PostSharp è proprio un framework implementato allo scopo di supportare AOP in .Net. Mentre nel modo Java i framework sono molteplici ma credo vada per la maggiore AspectJ, in .Net non c'era molta scelta. Io avevo sentito parlare di NAspect:

NAspect is an Aspect Oriented Programming (AOP) framework, which uses runtime subclassing in order to inject interceptors and mixins into your classes. It supports method, property and constructor interception.

Non credo sia molto manutenuto. O almeno non ne ho notizia. Per quanto riguarda PostSharp, consiglio di dare un'occhiata al video. Fantastico! Non sono mai stato così tentato dal riscrivere un'applicazione in produzione da 0 come adesso! :)

Cercando informazioni utili per questo post su NAspect, ho trovato questo link, un post in cui si elogiano le caratteristiche di debugging di NAspect.

Qualche altro link utile:

HTH