Почему на одном контроллере введено хранилище, а на другом - служба

Я читаю книгу М. Зеемана "Внедрение зависимостей в.NET", глава 2. Исходный код доступен здесь: http://www.manning.com/seemann/

В решении ComplexCommerce, CommerceWebPresentationModel, HomeController у нас есть хранилище, переданное в конструктор:

public HomeController(ProductRepository repository, CurrencyProvider currencyProvider)

который затем передается вновь созданному сервису!

    public ViewResult Index()
    {
        var currencyCode = this.CurrencyProfileService.GetCurrencyCode();
        var currency = this.currencyProvider.GetCurrency(currencyCode);

        var productService =
            new ProductService(this.repository);

Однако в BasketController у нас есть сервис, переданный в конструктор, в который внедряется BasketRepository.

    public BasketController(IBasketService basketService,
        CurrencyProvider currencyProvider)

Насколько я вижу, ProductService не реализует никакого интерфейса, и это делает HomeController непроверенным.

У меня такие вопросы: почему ProductService создается без помощи DI? Я что-то пропустил? Или это то, что автор пропустил (в действительно хорошей книге иначе!)?

1 ответ

Решение

Надеемся, что эта дискуссия проливает свет на этот вопрос.

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

Однако я не согласен с этим HomeController не тестируется, потому что я написал всю базу кода для книги, используя Test-Driven Development. Вы можете скачать код для книги и убедиться, что он покрыт тестами. Тем не менее, я согласен, что HomeController модульное тестирование сложнее, чем могло бы быть.

Кстати, я делаю ошибки во время кодирования, как и все остальные...

Другие вопросы по тегам