为什么一个控制器注入存储库而另一个控制器注入服务

时间:2014-03-18 22:33:24

标签: unit-testing design-patterns dependency-injection solid-principles

我正在阅读M. Seemann书籍.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不可测试。

我的问题是:为什么没有DI的帮助就会实例化ProductService?我错过了什么吗?或者这是作者遗漏的东西(否则就是一本非常好的书!)?

1 个答案:

答案 0 :(得分:3)

希望this discussion thread能够更多地了解此事。

简而言之,它就是一个例子,但并不是本书的重点之一。我通常不会在真实的生产代码库中有意地编写这样的代码。

但是,我不同意HomeController是不可测试的,因为我使用Test-Driven Development为本书编写了整个代码库。您可以下载该书的代码并验证它是否包含在测试中。但是,我同意HomeController比单位测试更难以进行单元测试。

为了记录,我在编码时犯了错误,就像其他人一样......