Ninject绑定通用接口到具有多个参数的通用具体类

时间:2014-07-08 20:08:21

标签: c# asp.net-web-api ninject

这很奇怪,我正在使用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'

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

更换

Bind(typeof(IHierarchyEntityBiz<KnowledgeDTO>))
.To(typeof(HierarchyEntityBiz<Knowledge, KnowledgeDTO>)).InRequestScope();

Bind<IHierarchyEntityBiz<KnowledgeDTO>>()
.To<HierarchyEntityBiz<Knowledge, KnowledgeDTO>>().InRequestScope();

不应该改变任何东西,但它可能值得一试;-)如果没有帮助,它至少会缩短一点。

所以对你的问题。 请告诉我们例外的全部信息。它应该包含激活堆栈,因此我们可以看到为什么ninject试图实现KnowledgeController

您很可能缺少AuthenticationServiceIKnowledgeBiz的绑定。