0

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();
    }
}

アスペクトを間違った方法で適用していますか?

4

2 に答える 2

2

アスペクトをデバッグする良い方法は、Reflector を使用して結果のアセンブリを確認することです。メソッドは期待どおりに強化されていますか?

また、ProvideAspects メソッドにブレークポイントを設定し、次のコマンド ラインで msbuild を実行することによって、メソッドをデバッグすることもできます。

msbuild /p:PostSharpAttachDebugger=true
于 2009-09-13T20:13:40.570 に答える
0

PostSharp をインストールしたときにグローバルに定義されましたか? それ以外の場合は、PostSharp がアセンブリに適切に挿入されるように、プロジェクト ファイルを編集する必要があります。

http://doc.postsharp.org/1.0/Default.aspx##PostSharp.HxS/UserGuide/Platform/EnablingPostSharp.htmlを参照してください。

于 2009-09-13T16:36:13.817 に答える