プロジェクトでは、Castle Dynamic Proxy を使用して、ファサードによって実行されるすべてのコードを try/catch ブロックでラップしています (奇妙に聞こえますか?ここで説明されています)。これは問題なく動作しますが、すべてのメソッド呼び出しが確実にインターセプトされるようにするために、インターフェイスのNonProxyableMemberNotification
メソッドを使用して、仮想以外のものに遭遇したときに例外をスローします。IProxyGenerationHook
public void NonProxyableMemberNotification(Type type, MemberInfo memberInfo)
{
throw new InvalidOperationException(string.Format(
"Proxy failure. {0} {1} in {2} is not virtual.",
memberInfo.MemberType, memberInfo.Name, memberInfo.DeclaringType));
}
Krzysztof Koźmic のすばらしいチュートリアルによると、オブジェクト クラスは特殊なケースであり、デフォルトでは DynamicProxy はそれらを無視します。私の場合、次のサンプルMemberInfo
データからわかるように、問題は無視されません。
ここで見逃したものはありますか?NonProxyableMemberNotification
オブジェクトメソッドで起動するはずですか?
私は .Net 3.5、VS2010、Castle Core バージョン 2.5.2 を使用していObject.GetType()
ますXmlDocumentBackend
。