Динамическое разрешение на основе соглашения об именах в замке Виндзор
У меня, казалось бы, простой вариант использования. Есть компонент ICsvReader. Давайте назовем это просто Reader здесь. Мы загружаем известный набор файлов CSV, и некоторые из них имеют заголовки, а некоторые нет. В настоящее время есть несколько читателей: Reader_Skips1Row, Reader_Skips2Rows и т. Д.
Есть ли способ зарегистрировать только один компонент и заставить Виндзора взглянуть на ключ компонента, убрать часть «_Skips ...» и разрешить требуемый компонент с соответствующими установленными свойствами?
Я попробовал субрезольвер и средство без удачи.
РЕДАКТИРОВАТЬ
Да, есть только одна реализация, но она используется как зависимость и настраивается для разрешения по имени. Ридер настроен в коде
Component.For<ICsvReader>()
.ImplementedBy<CommaSeparetedCsvReader>()
.DependsOn(new { SkipHeader = true, HeaderRowsToSkip = 2 } )
.Named("CommaSeparetedCsvReader_Skips2Rows")
.Lifestyle.Transient
Component.For<ICsvReader>()
.ImplementedBy<CommaSeparetedCsvReader>()
.DependsOn(new { SkipHeader = true, HeaderRowsToSkip = 1 } )
.Named("CommaSeparetedCsvReader_Skips1Row")
.Lifestyle.Transient
Component.For<ICsvReader>()
.ImplementedBy<CommaSeparetedCsvReader>()
.Named("CommaSeparetedCsvReader")
.Lifestyle.Transient
Они используются в качестве зависимости в классе процессора. Он настроен в XML, так что он может быть изменен во время выполнения
<component id="Processor
type="Processor">
<parameters>
<reader>CommaSeparetedCsvReader_Skips2Rows</reader>
</parameters>
</component>
В идеале я хотел бы зарегистрировать только компонент CommaSeparetedCsvReader, но когда делается попытка разрешить CommaSeparetedCsvReader_Skips2Rows, он должен удалить суффикс, проанализировать его и изменить свойства соответственно.
Можно ли как-то изменить поведение Resolve ()?
Спасибо том