[英]autofac multiple classes inherited from the same interface
我使用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;
}
當代碼運行時,訪問了錯誤的類,我正在測試的特定代碼分支應使用該類
pdfHedgeReport
但它實際上使用的是這個pdfRefVolReport
這是導致問題的代碼行
var result = await this._pdfHedgeReport.GenerateReportForEmail(hedgeRequest, reportTitle, reportDescription, rpt);
它實際上不是被訪問的pdfHedgereport類,它的pdfRefVolReport
所以我用autofac錯誤地注冊了這些方式嗎?
默認情況下,將返回您最后看到的最后注冊的類型。
代碼看起來像這樣。
注冊:
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時正在做這類事情的方式,並且效果很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.