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

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

В поиске сумел найти совет что типа наследоваться от ContextBoundObject (причем не прямо, а от каким-нить базовым классом, причем в другой ассембли, чтобы можно было ее подменять легко), и что типа мне от етого будет щастье. А проще нельзя?
Re: Узнать вызывающий объект.
От: Tom Россия http://www.RSDN.ru
Дата: 08.10.04 14:38
Оценка:
http://www.rsdn.ru/Forum/Message.aspx?mid=786007&only=1
Автор: SiAVoL
Дата: 30.08.04
Народная мудрось
всем все никому ничего(с).
Re[2]: Узнать вызывающий объект.
От: Tom Россия http://www.RSDN.ru
Дата: 08.10.04 14:45
Оценка:
упс. до конца вопрос не дочитал
Народная мудрось
всем все никому ничего(с).
Re: Узнать вызывающий объект.
От: Fj  
Дата: 08.10.04 15:55
Оценка:
Это я был тем анонимом.

Так вот. Я даже нашел забавного чувака, который написАл фиговинку, которая вызывается перед вызовом метода. http://www.thecodeproject.com/csharp/AspectIntercept.asp. Но! Эта его фиговинка тоже получает IMethodCallMessage, в котором никакого сендера или каллера нет совершенно! У меня создается странное ощущение, что, если зарыться в этот загадочный RPC совсем глубоко, то, может быть, можно будет что-нить найти, но подходить следует с совершенно другого конца.

Вот интересно. В микрософт вижуал студио в дебаге же показываются локальные переменные объекта... На любом уровне калл-стека. Где вообще this лежит?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.