2

WindsorforIoCを使用して正常に動作していたアプリケーションがあります。Windsorによってインスタンス化されたコンポーネントに対して行われたすべての呼び出しのメソッド呼び出し、パラメーター、および実行時間をログに記録したいので、IInterceptorを実装するLoggingInterceptorを実装しました。

Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
invocation.Proceed();  // EXCEPTION IS THROWN HERE
sw.Stop();
Logger.Debug(.....

これで、以前は正常に機能していた操作で、次のメッセージが表示されたVerificationExceptionsがスローされます。

メソッドRepositories.RepositoryBase.GetAll:型引数'ET'は型パラメーター'ET'の制約に違反しています。

メソッドのシグネチャは次のとおりです。

public IList<ET> GetAll<ET>() where ET : EntityBase2, IEntity2  

(EntityBase2とIEntity2はLLBLGenProからのものです)

メソッドの呼び出し元は次のとおりです。

public IList<ServerEntity> GetServers()
{
   return GetRepository<IServerRepository>().GetAll<ServerEntity>();
}

(GetRepository <>()はServiceLocatorの単なるラッパーです)

城の構成からインターセプターをコメントアウトすると、すべて正常に動作します。

なぜこれが今起こっているのですか、そしてロギングインターセプターを使用できるようにするための修正がありますか?

ありがとう

4

2 に答える 2

1

古いバージョンのWindsor(RC3以前)を使用している場合、古いDynamicProxyはサポートしていないため、ジェネリック型のインターセプターはサポートされていないと思います。

ウィンザーの最新リリースにアップデートしてみてください。ジェネリック型で動作するDynamicProxy2を内部で使用します。

于 2009-08-10T13:45:24.517 に答える
1

これは Visual Studio デバッガーでのみ発生しますか?

これは、Castle の最新のトランク バージョンでも発生しますか? (ここで見つけることができます)

于 2009-10-29T15:15:22.663 に答える