2017-08-14 26 views
0

使用autofac將我的依賴注入到我的類中。其中幾個類都實現了相同的接口。我註冊他們這樣autofac從同一接口繼承的多個類

builder.RegisterType<PDFHedgeReport<object>>().As<IPDFReport<object>>().InstancePerDependency(); 
     builder.RegisterType<PDFRefVolReport<object>>().As<IPDFReport<object>>().InstancePerDependency(); 

然後在我的類的構造函數我有這個

public ReportGenerationService(IScheduleRepository scheduleRepository, 
     ExportEngine.PDF.IPDFReport<object> pdfHedgeReport, 
     ExportEngine.PDF.IPDFReport<object> pdfRefVolReport, 
     ) 
    { 
     this._scheduleRepository = scheduleRepository; 
     this._pdfHedgeReport = pdfHedgeReport; 
     this._pdfRefVolReport = pdfRefVolReport; 

    } 
當代碼運行

,錯誤的類被訪問,碼IM測試的特定分支應該使用這個類

pdfHedgeReport

但其實際使用這一個pdfRefVolReport

這行代碼導致了問題

var result = await this._pdfHedgeReport.GenerateReportForEmail(hedgeRequest, reportTitle, reportDescription, rpt); 

它不是實際被訪問pdfHedgereport類多數民衆贊成,其pdfRefVolReport

所以我在註冊這些與autofac走錯了路?

回答

1

默認情況下,將返回最後註冊的類型,這是您所看到的。

您可能想了解如何註冊不同類型by key

代碼看起來像這樣。

報名:

var builder = new ContainerBuilder(); 
builder.RegisterType<PDFHedgeReport<object>>().Keyed<ExportEngine.PDF.IPDFReport<object>>("first"); 
builder.RegisterType<PDFRefVolReport<object>>().Keyed<ExportEngine.PDF.IPDFReport<object>>("second"); 
var container = builder.Build(); 

一些構造:

ctor(IIndex<string, ExportEngine.PDF.IPDFReport<object>> pdfHedgeReportCollection) 
{ 
    this.hedgeRefReport = pdfHedgeReportCollection["first"]; 
    this.refVolReport = pdfHedgeReportCollection["second"] 
} 

這是使用Autofac當我怎麼做這種東西,它工作得很好。

+1

工作完美,非常感謝你 – proteus