一見単純なユースケースがあります。ICsvReader コンポーネントがあります。ここでは単に Reader と名付けましょう。既知の CSV ファイルのセットを読み込みますが、ヘッダーがあるものとないものがあります。現在、複数のリーダーがあります: Reader_Skips1Row、Reader_Skips2Rows など。
コンポーネントを 1 つだけ登録し、Windsor にコンポーネント キーを見て、「_Skips...」部分を削除し、関連するプロパティ セットで必要なコンポーネントを解決する方法はありますか?
サブリゾルバーとファシリティを試してみましたが、うまくいきませんでした。
編集
はい、実装は 1 つしかありませんが、依存関係として使用され、名前で解決されるように構成されています。リーダーはコードで構成されます
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() の動作を何らかの方法で変更することは可能ですか?
ありがとう、トム