我有一个属性:
[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(),否则什么都不做(甚至不验证)
提前致谢。