Generics 温莎呼叫“的问题”;“一般化”;添加拦截器后的方法

Generics 温莎呼叫“的问题”;“一般化”;添加拦截器后的方法,generics,castle-windsor,iinterceptor,Generics,Castle Windsor,Iinterceptor,我有一个运行良好的应用程序,它将温莎应用于国际奥委会。我想记录对Windsor实例化的组件进行的所有调用的方法调用、参数和执行时间,因此我实现了一个LoggingInterceptor,它实现了IIInterceptor,它包含: Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); invocation.Proceed(); // EXCEPTION IS THROWN HERE sw.Stop(); Logger.De

我有一个运行良好的应用程序,它将温莎应用于国际奥委会。我想记录对Windsor实例化的组件进行的所有调用的方法调用、参数和执行时间,因此我实现了一个LoggingInterceptor,它实现了IIInterceptor,它包含:

Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
invocation.Proceed();  // EXCEPTION IS THROWN HERE
sw.Stop();
Logger.Debug(.....
现在,以前工作正常的操作正在抛出带有以下消息的VerificationException:

方法Repositories.RepositoryBase.GetAll:类型参数“ET”违反了类型参数“ET”的约束

该方法的签名为:

public IList<ET> GetAll<ET>() where ET : EntityBase2, IEntity2  
public IList GetAll()其中ET:EntityBase2,IEntity2
(其中EntityBase2和IEntity2来自LLBLGenPro)

方法的调用方如下所示:

public IList<ServerEntity> GetServers()
{
   return GetRepository<IServerRepository>().GetAll<ServerEntity>();
}
public IList GetServers()
{
返回GetRepository().GetAll();
}
(其中GetRepository()只是ServiceLocator的包装)

如果我从castle配置中注释掉拦截器,那么一切都会再次正常工作

为什么现在会发生这种情况,有没有修复程序可以让我使用我的日志拦截器


如果您使用的是旧版本的Windsor(RC3或更早版本),我认为它不支持泛型类型上的拦截器,因为旧的DynamicProxy不支持它


您可以尝试更新到Windsor的最新版本。它在引擎盖下使用DynamicProxy 2,它与泛型类型一起工作。

这是否仅在Visual Studio调试器下发生


这在Castle的最新主干版本上也会发生吗?(您可以找到)

请发布一个完整的运行测试用例,重新说明这个问题。我运行的是温莎城堡2.5,我有完全相同的问题。