При помощи StackTrace/StackFrame я могу узнать очень много всего интересного — вызывающий метод, класс которому принадлежит этот метод етс. Но! Совершенно невозможно получить ссылку на экземпляр класса, вызвавший этот метод!
Зачем это мне нужно: типа пишу некую систему, в которой будут взаимодействовать объекты, и хочу наложить определенное policy на то, как они друг у друга будут методы вызывать. Конкретно — что все методы, которые изменяют состояние объекта могут вызываться только "текущим" объектом (исключив таким образом возможность reentrancy (которая начинает играть новыми страшными красками в ООП)).
На вид оптимально было бы в начале каждого такого "проверяемого" метода ставить что-нить типа ObjectManager.CheckCall(), который бы проверил, что объект вызвавший этод метод (не CheckCall, а тот, в начале которого стоит CheckCall) имел право это сделать (т.е. являлся текущим). В дебаге. А в релизе был бы пустым.
А то подходить к этому с другой стороны и парсить мсил-код каким-нить образом ужасно не хочется.
В поиске сумел найти совет что типа наследоваться от ContextBoundObject (причем не прямо, а от каким-нить базовым классом, причем в другой ассембли, чтобы можно было ее подменять легко), и что типа мне от етого будет щастье. А проще нельзя?