我正在阅读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?我错过了什么吗?或者这是作者遗漏的东西(否则就是一本非常好的书!)?
答案 0 :(得分:3)
希望this discussion thread能够更多地了解此事。
简而言之,它就是一个例子,但并不是本书的重点之一。我通常不会在真实的生产代码库中有意地编写这样的代码。
但是,我不同意HomeController
是不可测试的,因为我使用Test-Driven Development为本书编写了整个代码库。您可以下载该书的代码并验证它是否包含在测试中。但是,我同意HomeController
比单位测试更难以进行单元测试。
为了记录,我在编码时犯了错误,就像其他人一样......