ввести несколько сервисов в контроллер mvc?

Реорганизовал мое приложение MVC с использованием entity framework как ORM и Autofac как DiContainter.

Я столкнулся со следующей проблемой. У меня есть контроллер, в котором я выполняю грубые операции для объекта, который имеет множество сложных свойств.

здесь я показываю упрощенный пример, не имеющий ничего общего с проектом.

public class Car  
{
       public int Id {get;set;}
       public int Doors { get; set; }
       public double Miles { get; set; }
       .....
       public Brand Brand { get; set; }
       public Engine Engine { get; set; }
       public FuelType FuelType {get;set;}

}

public class Brand 
{
    public int Id { get; set; }
    public string Name  { get; set; }

    .....

}// Same for Engine, FuelType,....

для всех этих объектов у меня есть службы для действий CRUD

для объектов без сложных свойств я добавляю 1 службу в свой контроллер, например

public class BrandController : Controller
{

    readonly IBrandService brandService;
    public KwaliteitController(IBrandService  _BrandService)
    {
        brandService = _BrandService;
    }
   //here comes actionresults for CRUD operations and etcetera...
 }

Это отлично работает и выглядит чистым для моего. Теперь проблема в моем CarController. Мне также нужны все имена «или другие свойства» для Fueltype, Brand, Engine, ....

Я могу получить эти значения и идентификаторы из этой службы, но затем мне нужно ввести их все в свой контроллер, например

     public class CarController : Controller
{
    readonly ICarService carService;
    readonly IBrandService brandService;
    readonly IFuelTypeService fuelTypeService;
    readonly IEngineService engineService;
    public KwaliteitController(ICarService _CarService IBrandService  _BrandService,.....)
    {
        carService = _CarService;
        brandService = _BrandService;
        ....
    }
 }

На самом деле у меня есть объекты с более чем 10 подобными свойствами, поэтому мне не пришлось бы внедрять более X сервисов в свой контроллер. Мне это кажется серьезным излишеством. Есть ли способ сделать это, не используя все мои службы для 1 контроллера.


person Frederik De Clercq    schedule 30.03.2017    source источник
comment
создать новую машину   -  person Frederik De Clercq    schedule 30.03.2017
comment
Классический признак слишком большого количества обязанностей. (Нарушение SRP) проверьте свой дизайн.   -  person Nkosi    schedule 30.03.2017
comment
Вам следует использовать универсальные шаблоны в своем классе (ах) обслуживания, что позволит вам вводить гораздо меньше служб, возможно, только одну. Если вам интересно, у меня есть пример подобного в моем блоге: cpratt.co/truly- общий-репозиторий   -  person Chris Pratt    schedule 30.03.2017
comment
Они напрямую действуют против источника данных. Файлы базы данных и csv   -  person Frederik De Clercq    schedule 30.03.2017