Внедрение зависимостей и ModelStateWrapper - PullRequest
3 голосов
/ 21 апреля 2009

в учебнике Проверка с помощью сервисного слоя Конструктор для Product Service выглядит следующим образом:

ProductService(IValidationDictionary validationDictionary, IProductRepository repository)

и его экземпляр в конструкторе контроллера по умолчанию создается следующим образом:

public ProductController() 
{   
    _service = new ProductService(new ModelStateWrapper(this.ModelState), new roductRepository());

}

Если я хочу использовать Unity для DI, очевидно, следует использовать второй конструктор.

public ProductController(IProductService service)
{
    _service = service;
}

Но тогда я не знаю, как настроить Unity для внедрения первого параметра ProductServise, поскольку ModelStateWrapper использует ModelState из контроллера, который создается внутри контроллера и не может быть введен. Можно ли внедрить такую ​​зависимость в ProductService?

1 Ответ

0 голосов
/ 22 апреля 2009

Подумайте.

Вот что вы пытаетесь сделать:

  • Для создания контроллера продукта требуется сервис продукта
  • для создания сервиса продукта необходим контроллер продукта

у вас замкнутый круг, поэтому вы не можете этого сделать.

Я не знаю о реализации Unity, но концептуально вам нужно разорвать круг, как это:

  • создать контроллер продукта, не передавая ему обслуживание продукта
  • создать сервис продукта и передать ему модельное состояние контроллера продукта
  • Внедрить услугу продукта в контроллер продукта посредством ввода свойства

AFAIK unity действительно поддерживает внедрение свойства, но требует, чтобы вы поместили атрибут в свойство. На вашем месте я бы подумал об использовании менее инвазивного контейнера (почти любой другой лучше).

...