Классы, которые наследуются от ContextBoundObject, выполняют методы, передавая сообщения, а не традиционную модель выполнения на основе стека. Эта способность используется в качестве основы для удаленного взаимодействия и взаимодействия COM. Один из интересных вариантов заключается в том, что становится возможным перехватывать вызовы методов с использованием атрибутов, что допускает своего рода «АОП для бедняков».
Одним из вариантов избавления от логики, предоставляемой атрибутами, будет создание файла конфигурации для переопределения того, какой класс создается при создании нового класса. Эта возможность доступна только для классов, унаследованных от MarshalByRef, который является базовым классом для ContextBoundObject.
Другим вариантом может быть создание экземпляра класса с использованием отражения. То есть, чтобы найти конкретный ConstructorInfo и вызвать его для создания экземпляра. Когда вы просто «новый» экземпляр, вызов направляется в Activator.CreateInstance, который, вероятно, дает вам объект прокси для фактического класса. Создание объекта напрямую может обойти это, хотя это выстрел в темноте.