私は属性を持っています:
[Serializable()]
[IntroduceInterface(typeof(IPersistable), OverrideAction = InterfaceOverrideAction.Ignore)]
[MulticastAttributeUsage(MulticastTargets.Class)]
public sealed class PersistableAttribute : InstanceLevelAspect, IPersistable
{
//TODO: revise: move some to compile time
[OnLocationSetValueAdvice(), MulticastPointcut(Targets = MulticastTargets.Property, Attributes = MulticastAttributes.Instance | MulticastAttributes.NonAbstract)]
public void OnPropertySet(LocationInterceptionArgs args)
{
// sets the value.
args.ProceedSetValue();
if(Validate(args.Location.PropertyInfo))
{
Work();//Some time-consuming work
}
}
}
実行時に、Work()とValidate()は時間がかかりすぎます。プロパティの変更が多すぎて、プロパティが変更されるたびに、Validate()が呼び出されます。このOnPropertySetのインジェクションをコンパイル時間に移動する方法を探しています。つまり、コンパイル時に、Validate(args.Location.PropertyInfo)== trueの場合、Work()を挿入します。それ以外の場合は、何もしません(検証すらしません)。
前もって感謝します。