Мой аспект:
[Serializable]
[MulticastAttributeUsage(MulticastTargets.Class, Inheritance = MulticastInheritance.Strict)]
public sealed class NotifyPropertyChangedAttribute : InstanceLevelAspect
{
[OnLocationSetValueAdvice, MulticastPointcut(Targets = MulticastTargets.Property)]
public void OnPropertySet(LocationInterceptionArgs args)
{
if (args.Value == args.GetCurrentValue()) return;
args.ProceedSetValue();
IPersistent iENtity = this.Instance as IPersistent;
if (iENtity != null)
{
// do something with iENtity
// need to identify property name without using reflection
}
}
}
Я применил этот NotifyPropertyChangedAttribute ко всему классу, чтобы я мог обрабатывать изменения свойств, все работает как положено.
Но я хотел бы знать имя свойства, которое было изменено (чтобы я мог хранить имена грязных свойств в некоторой коллекции). Я хотел использовать LocationInterceptionArgs :: Location, но я прочитал это:
"Using this property causes the aspect weaver to generate code that has non-trivial runtime overhead."
Есть ли другой способ получить имя затронутого свойства в моем аспекте, но без использования отражения или другого кода, который имеет большие накладные расходы во время выполнения?
Есть идеи (или лучше - примеры)? Может быть, я могу реализовать это как-то иначе? Мне просто нужен какой-то способ идентификации свойства во время выполнения, даже без имени - просто какое-то значение, которое я могу использовать, чтобы найти свойство в некотором словаре <> позже ...
Спасибо.