PostSharp を使用して、CompoundAspect を ActiveRecord クラス (CastleProject から) に適用しています。コードは次のようになります。
public override void ProvideAspects(object targetElement, LaosReflectionAspectCollection collection)
{
Type targetType = (Type)targetElement;
RevertibleSubAspect revertible = new RevertibleSubAspect();
revertible.Cascade = this.Cascade;
collection.AddAspect(targetType, revertible);
//This isn't working
MethodInfo saveMethod = targetType.GetMethod("Save");
collection.AddAspect(saveMethod, new CommitOnSaveSubAspect());
foreach (PropertyInfo property in targetType.GetProperties())
{
if((this.Only != null && this.Only.IndexOf(property.Name) == -1) ||
(this.Except != null && this.Except.IndexOf(property.Name) > -1))
{
continue;
}
if (property.DeclaringType == targetType && property.CanWrite)
{
MethodInfo method = property.GetSetMethod();
if (method != null && !method.IsStatic)
{
collection.AddAspect(method, new TrackInitialPropertyValuesSubAspect());
}
}
}
}
OnMethodBoundaryAspect である CommitOnSaveSubAspect を除いて、すべて正常に動作します。Save メソッドが呼び出されたときに OnSuccess メソッドが呼び出されることはありません。コードを OnEntry と OnExit に移動しようとしましたが、ここでも同じ状況です。
CommitOnSaveSubAspect クラスは次のようになります。
[Serializable]
class CommitOnSaveSubAspect : OnMethodBoundaryAspect
{
public override void OnSuccess(MethodExecutionEventArgs eventArgs)
{
((IRevertible)eventArgs.Instance).Commit();
}
}
アスペクトを間違った方法で適用していますか?