簡體   English   中英

autofac從同一接口繼承的多個類

[英]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錯誤地注冊了這些方式嗎?

默認情況下,將返回您最后看到的最后注冊的類型。

您可能想查看如何通過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時正在做這類事情的方式,並且效果很好。

暫無
暫無

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

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