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

А то подходить к этому с другой стороны и парсить мсил-код каким-нить образом ужасно не хочется.

В поиске сумел найти совет что типа наследоваться от ContextBoundObject (причем не прямо, а от каким-нить базовым классом, причем в другой ассембли, чтобы можно было ее подменять легко), и что типа мне от етого будет щастье. А проще нельзя?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.