PostSharp , который является посткомпилятором, делает что-то похожее на то, что вы описываете, используя атрибуты для маркировки точек внедрения в коде, единственное отличие состоит в том, что он делает это во время компиляции.
Но вы также можете сделать это во время выполнения не изменяя тела метода, а используя классы, производные от ContextBoundObject , который является классом .Net, который позволяет вам перехватывать все вызовы, сделанные против него. Вот статья MSDN Magazine , описывающая, как сделать AOP с помощью ContextBoundObject. (Проверьте аспекты в .Net части статьи)
И в качестве третьего варианта вы можете использовать динамическую генерацию кода (Reflection.Emit или CodeDom) в сочетании с атрибутами и виртуальными методами для динамической генерации производных классов, куда вы можете вставить свой код, но это самый болезненный способ сделать это .
Edit:
Существует четвертый вариант использования .Net API неуправляемого профилирования для перехвата метода JIT и замены тел методов перед JIT.
Эта техника успешно используется JustMock (Telerik) для макетирования статических методов, не виртуальных методов и даже запечатанных классов.