我有一个使用Windsor for IoC的应用程序运行良好。我想记录对Windsor实例化的组件所做的所有调用的方法调用,参数和执行时间,所以我实现了一个实现IInterceptor的LoggingInterceptor,它包含:
Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
invocation.Proceed(); // EXCEPTION IS THROWN HERE
sw.Stop();
Logger.Debug(.....
现在以前工作正常的操作会抛出VerificationExceptions,并带有以下消息:
Method Repositories.RepositoryBase.GetAll:type参数'ET'违反了类型参数'ET'的约束。
该方法的签名是:
public IList<ET> GetAll<ET>() where ET : EntityBase2, IEntity2
(其中EntityBase2和IEntity2来自LLBLGenPro)
该方法的调用者如下:
public IList<ServerEntity> GetServers()
{
return GetRepository<IServerRepository>().GetAll<ServerEntity>();
}
(其中GetRepository&lt;&gt;()只是ServiceLocator的包装器)
如果我从城堡配置中注释出拦截器,那么它一切正常。
为什么现在发生这种情况,是否有修复,以便我可以使用我的日志拦截器?
感谢
答案 0 :(得分:1)
如果您使用的是较旧版本的Windsor(RC3或更早版本),我认为它不支持Generic类型的拦截器,因为旧的DynamicProxy不支持它。
您可以尝试更新到最新版本的Windsor。它使用DynamicProxy2,它使用泛型类型。
答案 1 :(得分:1)
这是否仅在Visual Studio调试器下发生?
这是否也发生在Castle的最新主干版本上? (你可以找到here)