Looks like a violation of SRP. Does each View Model require all repositories? Do some ViewModels just use a couple? Are you doing other complex work to create ViewModel? If so I would abstract the general concept of ViewModel construction and ideally use something like Automapper to remove any mappings.
We abstract the concept of populating the select lists and other complex work using an IModelEnricher<T>
where T is a ViewModel. IModelEnricher<T>
defines one method Enrich which takes an instance of the T ViewModel and returns an instance T. In the Enrich method do any clever work you need to do. If you need two repositories for a ViewModel then you are only injecting those into the constructor of your IModelEnricher<T>
We automatically use an IModelEnricher to enrich ViewModels returned from our Action results. We always also automap our domain model to the ViewModel in the same pipeline. Most Get controller actions are a single line of code as Automapper handles taking Domain Model to ViewModel and enricher does any additional stuff.
retrun AutoMappedView<AConcreteViewModel>(repository.Find(id))
If a class implemeting IModelEnricher is found for AConcreteViewModel
it will be called and any work done e.g.
public class AConcreteViewModelEnricher:IModelEnricher<AConcreteViewModel>{
AConcreteViewModelEnricher(Repo1 repo1, Reop2 rep2){
........
}
AConcreteViewModel Enrich(AConcreteViewModel model){
//Do stuff with repo etc and
return model
}
}
See my answer to your other question about drop downs.