【发布时间】:2012-06-28 05:54:42
【问题描述】:
当我尝试使用下面的解决方案将 Ninject 3 与 MVC 4 RC Web Api 项目一起使用时,问题就开始了:
http://www.peterprovost.org/blog/2012/06/19/adding-ninject-to-web-api/
此解决方案使用 IActivationBlock(使用 IKernel 中的 BeginBlock 方法创建)来实现调用范围。使用常规的 Ninject 项目,似乎可以正常工作,但是当项目使用扩展 Ninject.Extensions.Interception.DynamicProxy 时,调用激活块的 Dispose 方法时会出现以下异常:
加载 Ninject 组件 IAdviceRegistry 时出错
内核的组件容器中没有注册过这样的组件。
并且,在下次创建新的ActivationBlock并调用Resolve方法时,会出现以下异常:
加载 Ninject 组件 ICache 时出错
内核的组件容器中没有注册过这样的组件。
问题似乎与MVC更新没有直接关系,而是DynamicProxy和IActivationBlock之间的一些不兼容。
编辑:
问题的根源是当其中一个类型在构造函数上需要 IKernel 时,它与 DynamicProxy 没有直接关系,但第一个异常仅在您引用此程序集时发生。
因此,如果您的类型需要 IKernel,则总是会出现第二个错误(与 ICache 相关)。
【问题讨论】:
-
有人想出解决办法吗?
标签: ninject asp.net-mvc-4 asp.net-web-api