将泛型接口绑定到具有多个参数的泛型具体类

本文关键字:参数 泛型 泛型接口 绑定 | 更新日期: 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

很可能您丢失了AuthenticationServiceIKnowledgeBiz的绑定