Отслеживать вызовы автоматически реализованных свойств - PullRequest
5 голосов
/ 19 октября 2010

Есть ли способ, которым я могу отслеживать и перехватывать вызовы значений в свойствах, которые реализуются автоматически?

Я хотел бы иметь код, который выглядит примерно так:

[Tracked]
public int SomeProperty { get; set; }

В идеале атрибут мог бы перехватывать изменения значений свойств. Это возможно?

То, что я не хочу, чтобы второй кусок кода вращался позже по объекту и запрашивал значения, а скорее атрибут должен соответствовать значению, как оно устанавливается.

Ответы [ 3 ]

4 голосов
/ 19 октября 2010

Нет.То, как вы делаете это, не используя автоматические свойства.Единственное возможное решение - это использовать что-то вроде Castle AOP для создания автоматических оболочек вокруг вашего класса и отслеживания изменений, но это очень сложная работа для реализации.

3 голосов
/ 19 октября 2010

Если вам нужно решение, которое работает во время выполнения, вам понадобится инфраструктура аспектно-ориентированного программирования (AOP);Я использовал CciSharp с некоторым успехом.Он не такой зрелый, как PostSharp, но работает по тому же базовому принципу: он изменит ваш уже скомпилированный код, создав другую сборку.

Если вы просто хотите это для тестирования (или профилирования), то естьдругой вариант: Microsoft Moles (что также бесплатно).Это работает совсем по-другому;для изменения программы во время ее работы используется тип обхода, перехватывая методы получения и установки свойств.

3 голосов
/ 19 октября 2010

Вы должны быть в состоянии сделать это с помощью AOP-фреймворка, такого как PostSharp (который я отмечаю, теперь коммерческий). Здесь есть еще несколько ссылок здесь , но некоторые ссылки не работают.

...