[英]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
。
很可能您缺少AuthenticationService
或IKnowledgeBiz
綁定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.