2017-08-14 4 views
0

Ich benutze Autofac, um meine Abhängigkeiten in meine Klassen zu injizieren. Mehrere dieser Klassen implementieren alle dieselbe Schnittstelle. Ich registriere sie wie dieseAutofac mehrere Klassen von der gleichen Schnittstelle geerbt

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

dann in meiner Klasse Konstruktor Ich habe diesen

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

    } 

wenn der Code ausgeführt wird, wird die falsche Klasse zugegriffen wird, der bestimmte Zweig des Codes im Test verwendet werden soll diese Klasse

pdfHedgeReport

aber es ist eigentlich mit dieser ein pdfRefVolReport

dies ist die Code-Zeile das Problem verursacht

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

sein nicht wirklich pdfHedgereport Klasse das ist, zugegriffen wird, sein pdfRefVolReport

so bin ich diese die falsche Art und Weise mit Autofac Registrierung ??

Antwort

1

Standardmäßig wird der Typ, der zuletzt registriert wurde, zurückgegeben, was Sie sehen.

Sie können überprüfen, wie Sie die verschiedenen Typen by key registrieren.

Der Code würde ungefähr so ​​aussehen.

Anmeldung:

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(); 

Einige Konstruktor:

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

Dies ist, wie ich diese Art von Sachen mache, wenn Autofac verwenden und es funktioniert ganz gut.

+1

das hat perfekt funktioniert, vielen Dank – proteus

Verwandte Themen