我使用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;
}
当代码运行时,正在访问错误的类,代码im测试的特定分支应该使用此类
pdfHedgeReport
但它实际上使用了这个pdfRefVolReport
这是导致问题的代码行
var result = await this._pdfHedgeReport.GenerateReportForEmail(hedgeRequest, reportTitle, reportDescription, rpt);
它实际上并不是被访问的pdfHedgereport类,它的pdfRefVolReport
所以我用autofac注册了这些错误的方法吗?
答案 0 :(得分: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时做这种事情的方法,而且效果很好。