2009-08-09 5 views
2

IoCでWindsorを使用するアプリケーションが正常に動作しています。私は、メソッド呼び出し、パラメータ、およびウィンザーによってインスタンスのコンポーネントに対して行われたすべてのコールの実行時間を記録したいので、私は含まれていIInterceptorを実装LoggingInterceptor、実装:以前にうまく働いた操作が投げている今Windsorで問題が発生し、インターセプタを追加した後にGenericizedメソッドが呼び出される

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

を次のメッセージを含む検証例外:

メソッドリポジトリ。リポジトリベース。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のラッパーです)

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

なぜこれが起こっているのですか?修正プログラムがあるので、私はログインターセプタを使用できますか?

おかげ

+0

この問題を解決する完全なテストケースを投稿してください。 –

+0

私はWindsor Castle 2.5を実行していますが、私は全く同じ問題を抱えています。 –

答えて

1

あなたはウィンザー(RC3またはそれ以前)の古いバージョンを使用している場合は、私は古いDynamicProxyがそれをサポートしていないので、それが一般的なタイプのインターセプターをサポートしていないと思います。

ウィンザーの最新リリースにアップデートすることがあります。ボンネットの下でDynamicProxy2を使用します。これはジェネリックタイプで動作します。

1

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

これは最新のトランクバージョンのキャッスルでも起こりますか? (hereがあります)

関連する問題