2017-08-14 9 views
0

私のクラスに依存関係を挿入するためにautofacを使用しています。これらのクラスのいくつかはすべて同じインターフェースを実装しています。この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

が、そのは実際にこの1 pdfRefVolReport

を使用して

これは、コードの行が問題実際pdfHedgereportクラスのthatsがアクセスされていないその

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

、そのpdfRefVolReport

は、私はこれらのautofacと間違った方法を登録していますを引き起こしています?

答えて

1

デフォルトでは、最後に登録されたタイプが返されます。これが表示されます。

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を使用しているとき、私はもののこの種をやっている方法であり、それは非常によく動作します。

+1

完璧に動作しました、ありがとうございます – proteus

関連する問題