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 时就是这样做的,效果很好。
我正在使用 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 时就是这样做的,效果很好。