Я внедряю внедрение зависимостей с помощью Autofac. У меня проблемы с использованием правильного экземпляра объекта, который я передаю в конструктор компонента.
Мое намерение состоит в том, чтобы Autofac создал и ReportFileGenerator, и ReportDefinition, а затем изменил значения ReportDefinition с помощью действия post в контроллере до , создав ReportFileGenerator, чтобы обновленное значение можно было передать в качестве его параметра. .
У меня есть ReportController :
public class ReportController
{
private readonly IReportFileGenerator _reportFileGenerator;
private IReportDefinition _reportDefinition;
public ReportController(
IReportFileGenerator reportFileGenerator,
IReportDefinition reportDefinition
{
_reportFileGenerator = reportFileGenerator;
_reportDefinition = reportDefinition;
}
(...)
[HttpPost]
public ActionResult Report(ReportViewModel viewModel)
{
_reportDefinition = viewModel.ReportDefinition
return _reportFileGenerator.GenerateReportFile();
}
}
ReportFileGenerator
public class ReportFileGenerator : IReportFileGenerator
{
private readonly IReportDefinition _reportDefinition;
public ReportFileGenerator(
IReportDefinition reportDefinition)
{
_reportDefinition = reportDefinition
}
public FileContentResult GenerateReportFile()
{
[some logic to generate file result using reportDefinition]
}
}
и, наконец, мои регистрации:
builder.RegisterType<ReportFileGenerator>()
.As<IReportFileGenerator>()
.InstancePerRequest();
builder.RegisterType<ReportDefinition>()
.As<IReportDefinition>()
.InstancePerRequest();
Проблема в том, что ReportDefinition, который передается в ReportFileGenerator, не имеет значений, назначенных в действии контроллера (это просто новый экземпляр со значениями по умолчанию).