簡體   English   中英

Ninject將泛型接口綁定到具有多個參數的泛型具體類

[英]Ninject binding generic interface to generic concrete class with multiple parameters

這很奇怪,我使用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綁定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM