私の側面:
[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."
私のアスペクトで影響を受けるプロパティの名前を取得する方法は他にありますが、リフレクションや実行時のオーバーヘッドが大きい他のコードを使用する必要はありませんか?
任意のアイデア (またはより良い - 例)? 多分私はそれを他の方法で実装できますか?名前がなくても、実行時にプロパティを識別する方法が必要です-後で Dictionary<> でプロパティを見つけるために使用できる値だけです...
ありがとう。