ランタイム パラメーターと暗黙的なコンストラクション インジェクションが混在していることにますます気付き、悪臭を放っています。
例 - フィルターを記述する基本クラスと、特定のフィルターのさまざまな継承タイプ (タグ、カテゴリ、日付、作成者など) があります。
var filter = StructureMap.ObjectFactory
.With("caption").EqualTo("Posts filtered by tag:")
.With("parameters").EqualTo(parameters)
.With("displayInSummary").EqualTo(true)
.GetInstance<TagListFilter>();
これを行う理由は、コンストラクターに、StructureMap に具象クラス (IArticleConfigurator) を挿入するために使用するインターフェイスがあるためです。
public TagListFilter(string caption, IDictionary<string,string> parameters, bool displayInSummary, IArticleConfigurator configurator)
:base(caption, parameters,displayInSummary, configurator)
しかし、単純なコンストラクターを、インターフェイスではなく具象クラスに置き換えましたが、基本的には同じものに置き換えましたが、DIを使用して1つの具象型を注入しました。現在、私たちの構成はxmlファイルにありますが、CMSに移動されるため、これを行っているため、インターフェイスを使用することをお勧めします。
それは間違っているようで、DIの精神ではありません。
ファクトリを使用してさまざまなフィルターを生成する必要がありますか? その場合、DI を利用して IArticleConfigurator の具体的なインスタンスを取得できますか?