Динамический перехват вызовов in.NET

Мне интересно узнать, поддерживает ли .NET любую форму динамического перехвата вызовов методов (или вызовов свойств) во время выполнения. То есть, вы можете перехватить вызов объекта без статической информации о компиляции, такой как интерфейс (по линиям CORBA DII (текст ссылки) или IDispatch COM).

Если нет, то новая функция "динамически типизированные объекты" в C# 4.0 поможет в этом отношении.

3 ответов


нет ничего встроенного, что позволяет перехватить объект, который вы не можете контролировать создание экземпляра. Аналогично, в предстоящем .net 4.0 для этого не будет никаких новых возможностей.

Если вы можете управлять экземпляром:

  1. если ваш объект может быть MarshalByRef вы можете использовать объекта realproxy.
  2. вы можете использовать довольно много контейнеров IOC, например. LinFu, Замок Динамический Прокси
  3. вы может использовать такой инструмент, как PostSharp, Моно Сесил или Microsoft CCI чтобы переписать сборки с перехватами в качестве шага компиляции post.

Если вы не можете контролировать инстанцирования

  1. можно использовать ICorDebug - API отладки .Net, которые действительно трудно использовать и тяжелые.
  2. можно использовать ICorProfiler - API профилирования .Net, где также довольно сложно использовать.

кроме того, вы можете посмотреть на динамический язык, такой как IronRuby, который имеет встроенный alias_method и define_method доброта (которая позволяет переопределить что-либо), поэтому перехват запечен.


.NET 4.5 представляет метод для ReJIT методы, которые обеспечивают другой крюк для перехвата метода (при условии, что вы не используете параллельный / BG GC и метод не встроен)



Проверьте динамические объекты .net 4.0... Это может помочь.

http://www.ontheblog.net/CMS/Home/tabid/36/EntryID/77/Default.aspx