2009-09-15 8 views
0

PostSharpは、このエラーを与える:抽象メソッドにアスペクトを追加しますか?

PostSharp: Cannot apply an OnMethodInvocation aspect (...) with target-site weaving on the abstract or external method "...". Consider excluding the aspect from this method or use call-site weaving.

候補]呼び出しサイトの織りは、私のために適切なソリューションではありません。抽象メソッドの前処理/後処理を追加する方法はありますか?

答えて

1

アスペクト継承を使用することをお勧めします。アスペクトは、抽象メソッドを実装するすべてのメソッドに自動的に追加されます。

詳細については、MulticastAttribute.AttributeInheritanceまたはMulticastAttributeUsageAttribute.Inheritance、またはofficial documentationを参照してください。

+0

必要なもののように見えますが、OnMethodInvocationのアスペクトでは正しく動作しません。何か案は?ところで、あなたのドキュメントはOperaブラウザで非常に奇妙な動作をします。 – skevar7

+0

OnMethodInvocationは継承でも機能するはずです。何が起こるかを理解するためにリフレクターに確認してください。 –

+0

このアスペクトのコンパイル時エラーを表示します;) – skevar7

0

これは当然不可能です - 抽象的な方法、コードなしの方法でターゲットサイトウィービングをどのように実行しますか?もちろん、メソッドを実装しているすべての派生型でターゲットサイトウィービングを実行することはできますが、これにはこのタイプを制御する必要があります。あるいは、メソッドを非抽象かつ仮想にすることができ、基本実装を呼び出すために派生型が必要です。

+0

「テンプレートメソッド」パターンを使用することが可能になる方法は少なくとも1つあります。 PostSharpはすでに仮想メソッドに使用しています。抽象メソッドでも同じことができます。 – skevar7

+0

"[...]抽象メソッドの前処理/後処理を追加する方法は?"コード内のコールの前後にいくつかのステップを実行することを意味しますか?そして、あなたはそのアスペクトで何を達成したいですか? –

+0

私は、指定されたメソッドのグループから各メソッドの前後にいくつかのコードを実行するだけです。 PostSharpは良い解決策に見えましたが、抽象メソッドの問題は不可能です。 – skevar7