2010-04-29 59 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變量。