将泛型接口绑定到具有多个参数的泛型具体类
本文关键字:参数 泛型 泛型接口 绑定 | 更新日期: 2023-09-27 18:12:06
这很奇怪,我使用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'
替代
Bind(typeof(IHierarchyEntityBiz<KnowledgeDTO>))
.To(typeof(HierarchyEntityBiz<Knowledge, KnowledgeDTO>)).InRequestScope();
Bind<IHierarchyEntityBiz<KnowledgeDTO>>()
.To<HierarchyEntityBiz<Knowledge, KnowledgeDTO>>().InRequestScope();
不应该改变任何东西,但它可能值得一试;-)如果它没有帮助,它至少要短一点。
所以对于你的问题。请给我们异常的全部信息。它应该包含激活堆栈,所以我们可以看到为什么ninject试图实例化一个KnowledgeController
。
很可能您丢失了AuthenticationService
或IKnowledgeBiz
的绑定