我有一个看似简单的用例。有一个 ICsvReader 组件。让我们在这里简单地将其命名为 Reader。我们加载一组已知的 CSV 文件,其中一些有标题,有些没有。目前有多个阅读器:Reader_Skips1Row、Reader_Skips2Rows 等。
有没有办法只注册一个组件并让 Windsor 查看组件键,剥离“_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() 行为?
谢谢,汤姆