关于NerdDinner控制器构造函数的问题

时间:2010-04-29 11:40:55

标签: c#

我一直在看Nerd Dinner应用程序,更具体地说是它如何处理其单元测试。

RSVPController的以下构造函数让我稍微混淆

public RSVPController()
    : this(new DinnerRepository()) {
}

public RSVPController(IDinnerRepository repository) {
    dinnerRepository = repository;
}

据我所知,单元测试使用了第二个,因此它可以使用Fake存储库。我无法解决的是第一个构造函数的作用。它似乎没有设置dinnerRepository变量,它似乎暗示它继承了某些东西,但我真的没有得到它。

任何人都可以解释一下吗?

由于

2 个答案:

答案 0 :(得分:3)

第一个构造函数将“默认”IDinnerRepository实现(即DinnerRepository)传递给第二个构造函数。

这样做是因为MVC Controller Factory使用了空构造函数。换句话说,当应用程序实际执行时,它使用具有默认存储库实现的第一个构造函数。当单元测试想要测试Controller时,可以将模拟的IDinnerRepository传递给控制器​​。

答案 1 :(得分:0)

第一个构造函数使用新的DinnerRepository调用第二个构造函数。多数民众赞成在做什么:

: this(new DinnerRepository())

它调用第二个构造函数并将DinnerRepository变量与DinnerRepository的新实例一起分配。