2010-04-29 68 views
1

我一直在寻找Nerd Dinner应用程序,更具体地说它是如何处理它的单元测试的。关于NerdDinner控制器构造函数的问题

为RSVPController下面的构造混淆了我略有

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

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

从我可以告诉第二个是使用单元测试,因此它可以使用假库。我无法解决的是第一个构造函数的作用。它似乎没有设置dinnerRepository变量,它似乎暗示它继承了某些东西,但我真的不明白。

任何人都可以解释吗?

感谢

回答

3

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

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

+0

非常感谢。我完全读错了。我把它看作是这个构造函数的一部分,它是如何从DinnerRepository继承的,但现在它是合理的。 – Gavin 2010-04-29 14:14:07

0

第一constructore呼吁用新的DinnerRepository第二constructur。那是什么,这是这样做的:

: this(new DinnerRepository()) 

它调用第二个构造并分配与DinnerRepository的新实例dinnerRepository变量。