autofac multiple 类 继承自同一个接口

autofac multiple classes inherited from the same interface

我正在使用 autofac 将我的依赖项注入我的 classes。其中一些 classes 都实现了相同的接口。我是这样注册的

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

然后在我的 class 构造函数中我有这个

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

    }

当代码为运行时,正在访问错误的class,我测试的特定代码分支应该使用此class

pdf对冲报告

但它实际上使用了这个 pdfRefVolReport

这是导致问题的代码行

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

它实际上不是 pdfHedgereport class 正在访问,它是 pdfRefVolReport

所以我用 autofac 注册这些是错误的方式吗??

默认返回最后注册的类型,也就是你看到的。

您可能想查看如何注册不同的类型 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 时就是这样做的,效果很好。