我有一个运行良好的应用程序,它使用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,并显示以下消息:
方法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的包装器)
如果我注释掉城堡配置中的拦截器,一切都会正常工作。
为什么现在会发生这种情况,有没有修复方法让我可以使用我的日志截取程序?
谢谢
发布于 2009-08-10 13:45:25
如果您使用的是Windsor的旧版本(RC3或更早版本),我认为它不支持泛型类型上的拦截器,因为旧的DynamicProxy不支持它。
您可以尝试更新到Windsor的最新版本。它在幕后使用DynamicProxy2,这与泛型类型一起工作。
发布于 2009-10-29 23:15:23
这是否仅在Visual Studio调试器下发生?
在Castle的最新主干版本上也会发生这种情况吗?(你可以找到here)
https://stackoverflow.com/questions/1250478
复制相似问题