SRPに違反しているようです。各ビュー モデルにはすべてのリポジトリが必要ですか? 一部の ViewModel はカップルだけを使用しますか? ViewModel を作成するために他の複雑な作業を行っていますか? もしそうなら、ViewModel 構築の一般的な概念を抽象化し、理想的には Automapper のようなものを使用してマッピングを削除します。
IModelEnricher<T>
T が ViewModel であるを使用して、選択リストやその他の複雑な作業を設定するという概念を抽象化します。IModelEnricher<T>
T ViewModel のインスタンスを取り、インスタンス T を返す 1 つのメソッド Enrich を定義します。Enrich メソッドでは、必要な巧妙な作業を行います。ViewModel に 2 つのリポジトリが必要な場合は、それらをコンストラクターに注入するだけです。IModelEnricher<T>
IModelEnricher を自動的に使用して、Action の結果から返される ViewModel を強化します。また、常に同じパイプラインでドメイン モデルを ViewModel に自動マッピングします。Automapper が Domain Model から ViewModel への取得を処理し、エンリッチャーが追加処理を行うため、ほとんどの Get コントローラー アクションは 1 行のコードです。
retrun AutoMappedView<AConcreteViewModel>(repository.Find(id))
IModelEnricher を実装するクラスが見つかった場合は、AConcreteViewModel
それが呼び出され、すべての作業が行われます。
public class AConcreteViewModelEnricher:IModelEnricher<AConcreteViewModel>{
AConcreteViewModelEnricher(Repo1 repo1, Reop2 rep2){
........
}
AConcreteViewModel Enrich(AConcreteViewModel model){
//Do stuff with repo etc and
return model
}
}
ドロップダウンに関する他の質問に対する私の回答をご覧ください。