Converting a DropDownList retrieval service to generics or delegate methods mappingService below is actually just Automapper. I have a wrapper around it so that I can inject it.

I want to refactor the following code to be cleaner:

 public class DropDownListService : IDropDownListService
{
    private readonly IMappingService _mappingService;
    private readonly ICompanyRepository _companyRepository;
    private readonly IProjectTypeRepository _projectTypeRepository;
    private readonly IStatusRepository _statusRepository;
    private readonly IProjectManagerRepository _projectManagerRepository;
    private readonly IProjectArchitectRepository _projectArchitectRepository;
    private readonly IFeeTypeRepository _feeTypeRepository;
    private readonly IStateRepository _stateRepository;
    private readonly IPersonTypeRepository _personTypeRepository;

    public DropDownListService(IMappingService mappingService, ICompanyRepository companyRepository, IProjectTypeRepository projectTypeRepository, IStatusRepository statusRepository, IProjectManagerRepository projectManagerRepository, IProjectArchitectRepository projectArchitectRepository, IFeeTypeRepository feeTypeRepository, IStateRepository stateRepository, IPersonTypeRepository personTypeRepository)
    {
        _mappingService = mappingService;
        _companyRepository = companyRepository;
        _projectTypeRepository = projectTypeRepository;
        _statusRepository = statusRepository;
        _projectManagerRepository = projectManagerRepository;
        _projectArchitectRepository = projectArchitectRepository;
        _feeTypeRepository = feeTypeRepository;
        _stateRepository = stateRepository;
        _personTypeRepository = personTypeRepository;
    }

    public IEnumerable&lt;IDropDownList&gt; RetrieveCompanies()
    {
        return _mappingService.Map(_companyRepository.GetAll(), new List&lt;Company&gt;());
    }

    public IEnumerable&lt;IDropDownList&gt; RetrieveJobTypes()
    {
        return _mappingService.Map(_projectTypeRepository.GetAll(), new List&lt;ProjectType&gt;());
    }

    public IEnumerable&lt;IDropDownList&gt; RetrieveStatuses()
    {
        return _mappingService.Map(_statusRepository.GetAll(), new List&lt;Status&gt;());
    }

    public IEnumerable&lt;IDropDownList&gt; RetrieveProjectManagers()
    {
        return _mappingService.Map(_projectManagerRepository.GetAll(), new List&lt;ProjectManager&gt;());
    }

    public IEnumerable&lt;IDropDownList&gt; RetrieveProjectArchitects()
    {
        return _mappingService.Map(_projectArchitectRepository.GetAll(), new List&lt;ProjectArchitect&gt;());
    }

    public IEnumerable&lt;IDropDownList&gt; RetrieveFeeTypes()
    {
        return _mappingService.Map(_feeTypeRepository.GetAll(), new List&lt;FeeType&gt;());
    }

    public IEnumerable&lt;IDropDownList&gt; RetrievePhases()
    {
        return _mappingService.Map(_feeTypeRepository.GetAll(), new List&lt;Phase&gt;());
    }

    public IEnumerable&lt;IDropDownList&gt; RetrieveStates()
    {
        return _mappingService.Map(_stateRepository.GetAll(), new List&lt;State&gt;());
    }

    public IEnumerable&lt;IDropDownList&gt; RetrievePeopleTypes()
    {
        return _mappingService.Map(_personTypeRepository.GetAll(), new List&lt;PersonType&gt;());
    }

    public IEnumerable&lt;IDropDownList&gt; RetrieveMarkets()
    {
        return _mappingService.Map(_marketRepostiory.GetAll(), new List&lt;Market&gt;());
    }
}


As you can see I am injecting way too many things into this controller. I am not currently doing a spa application so I cannot do this separately on the presentation layer. What I would really like to do is use generics. The problem is, the DB value that is returned to me looks like this:

    public int StateID { get; set; }
    public string StateName { get; set; }


Each entity has the ID field and the name field only they are named for the table. I am unable to write one map (as far as I know how) with automapper to map them to the correct type.

How can I clean this class up?
The number of dependencies suggests this class is doing too much work and violates single responsibility principle. Instead of having one class factor all different enumerations, have multiple classes, e.g. one for project members, one for states, etc.