这很奇怪,我正在使用Ninject进行依赖注入,我在绑定方面没有问题,直到我将泛型接口绑定到一个通用的具体类,如下所示:
// * Two below bindings are like many other bindings that are OK
Bind<ISupplierAssessmentMarkBiz>()
.To<SupplierAssessmentMarkBiz>().InRequestScope();
Bind<ISupplierAssessmentDetailBiz>()
.To<SupplierAssessmentDetailBiz>().InRequestScope();
// * This below binding is problematic
Bind(typeof(IHierarchyEntityBiz<KnowledgeDTO>))
.To(typeof(HierarchyEntityBiz<Knowledge, KnowledgeDTO>)).InRequestScope();
然后在我的控制器的构造函数中,我有这个:
public KnowledgeController(AuthenticationService authSvc, IKnowledgeBiz knowledgeBiz,
IHierarchyEntityBiz<KnowledgeDTO> knowledgeHierarchyBiz)
: base(authSvc)
{
_knowledgeBiz = knowledgeBiz;
_knowldegHierarchyBiz = knowledgeHierarchyBiz;
}
因此,当我尝试调用web api服务时,我收到此错误:
'...KnowledgeController' does not have a default constructor.
在输出窗口中:
'A first chance exception of type 'Ninject.ActivationException' occurred in Ninject.dll'
任何帮助都将不胜感激。
答案 0 :(得分:1)
更换
Bind(typeof(IHierarchyEntityBiz<KnowledgeDTO>))
.To(typeof(HierarchyEntityBiz<Knowledge, KnowledgeDTO>)).InRequestScope();
与
Bind<IHierarchyEntityBiz<KnowledgeDTO>>()
.To<HierarchyEntityBiz<Knowledge, KnowledgeDTO>>().InRequestScope();
不应该改变任何东西,但它可能值得一试;-)如果没有帮助,它至少会缩短一点。
所以对你的问题。
请告诉我们例外的全部信息。它应该包含激活堆栈,因此我们可以看到为什么ninject试图实现KnowledgeController
。
您很可能缺少AuthenticationService
或IKnowledgeBiz
的绑定。