2010-04-29 3 views
1

J'ai regardé l'application Nerd Dinner, plus précisément comment elle gère ses tests unitaires.Question sur les constructeurs de contrôleurs NerdDinner

Les constructeurs suivants pour le RSVPController confondent mon peu

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

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

D'après ce que je peux dire que le second est utilisé par les tests unitaires de sorte qu'il peut utiliser des référentiels faux. Ce que je ne peux pas savoir, c'est ce que fait le premier constructeur. Il ne semble jamais définir la variable dinnerRepository, cela semble impliquer son héritage de quelque chose mais je ne comprends vraiment pas.

Quelqu'un peut-il expliquer?

Merci

Répondre

3

Le premier constructeur transmet l'implémentation "par défaut" IDinnerRepository (à savoir DinnerRepository) au second constructeur. Il le fait parce que ce constructeur vide est utilisé par MVC Controller Factory. En d'autres termes, lorsque l'application s'exécute réellement, elle utilise le premier constructeur avec l'implémentation du référentiel par défaut. Lorsqu'un test unitaire veut tester le contrôleur, un IDinnerRepository simulé peut être transmis au contrôleur.

+0

Un grand merci. Je lisais complètement faux. Je l'ai lu comme ce constructeur a hérité de DinnerRepository, mais c'est logique maintenant. – Gavin

0

Le premier constructore appelle la deuxième constructur avec une nouvelle DinnerRepository. Thats ce que cela fait:

: this(new DinnerRepository()) 

Il appelle le deuxième constructeur et attribue la variable dinnerRepository avec la nouvelle instance de la DinnerRepository.

Questions connexes