代码之家  ›  专栏  ›  技术社区  ›  proteus

autofac从同一接口继承多个类

  •  1
  • proteus  · 技术社区  · 8 年前

    我使用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公司

    这是导致问题的代码行

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

    那么,我是不是用错误的方式向autofac注册了这些内容??

    1 回复  |  直到 8 年前
        1
  •  2
  •   Jan_V    8 年前

    默认情况下,将返回最后注册的类型,这就是您看到的。

    您可能想了解如何注册不同的类型 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时做这类事情的方式,效果很好。