2010-12-10 40 views
2

J'essaie d'utiliser Ninject pour injecter des référentiels dans les contrôleurs de mon projet MVC.Vue maître-détail avec plusieurs référentiels utilisant l'injection de dépendance du contrôleur

public class HomeController : Controller 
    { 
     private readonly ICustomerRepository _customerRepository; 
     // 
     // GET: /Home/ 
     public HomeController(ICustomerRepository customerRepository) 
     { 
      _customerRepository = customerRepository; 
     } 
    } 

Tout cela est logique et est assez facile, mais quand la vue devient plus complexe et a besoin d'afficher un scénario de maître détail, dois-je injecter les deux interfaces du référentiel dans? Cela change-t-il s'il atteint 4 ou 5 niveaux de profondeur? (par exemple, l'utilisateur sélectionne le client, le projet, le groupe, la division, puis obtient une liste de personnes)

J'ai trouvé trois choses.

  1. Injectez tous les référentiels nécessaires via le constructeur.
  2. Créer le concept d'un super référentiel ou
  3. Créer des vues partielles et des contrôleurs pour chacun des référentiels.

Y at-il une meilleure pratique sur le modèle que je devrais utiliser pour cela? Toute idée serait géniale.

Répondre

1

L'option 3 est la meilleure - l'option 1 augmente le nombre de dépendances pour HomeController ce qui le rendra compliqué au fur et à mesure que le nombre de sources de données augmentera. L'option 2 crée un problème similaire pour votre «super-référentiel» car il nécessitera un grand nombre de méthodes pour prendre en charge toutes les requêtes de votre système.

La création d'un contrôleur pour un certain nombre de formulaires plus petits permettra à chacun d'être assez simple et facile à raisonner.

+0

Je peux voir ceci ... mais avouons-le, 2 dépendances dans un contrôleur n'est pas "trop". –

0

J'ai appris à penser à la manette comme étant juste un contrôleur de tout. Si vous adoptez cette approche, je pense que c'est tout à fait correct de l'avoir au courant de plusieurs référentiels/services. L'approche du référentiel maître fonctionne aussi bien qu'il y a moins d'instanciation requise du côté du contrôleur, mais c'est un peu moins explicite sur ce que vous faites et cela fait que le contrôleur s'appuie davantage sur la connaissance interne du référentiel/service.