asp.net mvc avec ioc -> éviter la soupe du constructeur avec BaseController

J’ai un BaseController que j’utilise pour héberger mes préoccupations transversales pour un projet MVC.

Cependant, cela signifie que mon contrôleur a 3 dépendances:

public BaseController (IUserService u, ITenantDetailsService t, ISiteConfiguration c) 

L’effet secondaire de ceci est que mes constructeurs pour chaque contrôleur dérivé sont inondés de parameters:

  public AccountController(ILocationService locationService, IAccountService accountService, IFormsAuthentication formsAuth, IMembershipService service, IUserService userService, ISiteConfiguration configuration) : base(locationService,userService, configuration ) 

J’utilise IoC (Windsor) pour résoudre mes contrôleurs, alors sachez que je pourrais supprimer les dépendances des constructeurs et laisser les propriétés publiques se connecter automatiquement.

Y a-t-il une raison de ne pas le faire autrement que de masquer certaines des dépendances?

 public AccountController (IAccountService, IFormsAuthentication, IMembershipService) 

Cette approche semble plus lisible et donne un aperçu clair des dépendances pertinentes pour ce contrôleur spécifique.

Ou ai-je tout faux et un BaseController n’est pas le bon endroit pour stocker les services transversaux.

Pensées appréciées.

Merci Chris

L’une des raisons pour lesquelles je peux penser est la convention – beaucoup de gens interprètent l’injection de setter comme une dépendance non requirejse et l’injection de constructeur comme requirejs. Bien que ce soit juste une convention, cela ne m’empêcherait pas d’utiliser les propriétés de câblage automatique dans cet exemple.

L’dependency injection est censée simplifier votre travail (je reconnais que ce n’est pas la raison la plus importante pour utiliser la DI, mais je pense que c’est une raison valable), pas plus difficile. Considérez une situation où vous devez append un autre service “global”. Vous devrez parcourir chaque contrôleur de votre projet et modifier un constructeur, ce qui est vraiment très grave.

Je suis venu avec une autre idée pour résoudre ce problème: créer un object collecteur, qui stocke toutes les dépendances “globales”, le faire passer à des contrôleurs concrets, puis passer à la base, ce qui nécessiterait des dépendances. Cela résoudrait le problème de l’ajout de dépendances et vous indiquez clairement que le contrôleur concret transmet des dépendances à la classe de base. Je ne l’aimais pas cependant, car il faut toujours changer 2 classes (“collecteur de dépendances” et BaseController) lorsque j’ajoute une nouvelle dépendance “globale”.