首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加拦截器后Windsor调用“泛化”方法的问题

添加拦截器后Windsor调用“泛化”方法的问题
EN

Stack Overflow用户
提问于 2009-08-09 03:14:00
回答 2查看 291关注 0票数 2

我有一个运行良好的应用程序,它使用Windsor for IoC。我希望记录方法调用、参数和对Windsor实例化的组件进行的所有调用的执行时间,因此我实现了一个实现IInterceptor的LoggingInterceptor,它包含:

代码语言:javascript
复制
Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
invocation.Proceed();  // EXCEPTION IS THROWN HERE
sw.Stop();
Logger.Debug(.....

现在,以前工作正常的操作抛出了VerificationExceptions,并显示以下消息:

方法Repositories.RepositoryBase.GetAll:类型参数'ET‘违反了类型参数'ET’的约束。

该方法的签名为:

代码语言:javascript
复制
public IList<ET> GetAll<ET>() where ET : EntityBase2, IEntity2  

(其中EntityBase2和IEntity2来自LLBLGenPro)

该方法的调用方如下:

代码语言:javascript
复制
public IList<ServerEntity> GetServers()
{
   return GetRepository<IServerRepository>().GetAll<ServerEntity>();
}

(其中GetRepository<>()只是ServiceLocator的包装器)

如果我注释掉城堡配置中的拦截器,一切都会正常工作。

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

谢谢

EN

回答 2

Stack Overflow用户

发布于 2009-08-10 13:45:25

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

您可以尝试更新到Windsor的最新版本。它在幕后使用DynamicProxy2,这与泛型类型一起工作。

票数 1
EN

Stack Overflow用户

发布于 2009-10-29 23:15:23

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

在Castle的最新主干版本上也会发生这种情况吗?(你可以找到here)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1250478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档