2009-11-02 6 views
8

J'ai quelques contrôleurs ici au travail qui contiennent des méthodes que je peux utiliser dans d'autres contrôleurs.Code de partage entre les contrôleurs ASP.NET MVC

J'ai envisagé de transférer certaines des fonctionnalités courantes vers un contrôleur de base dont elles pourraient hériter. Le problème avec ceci est que j'aurais des méthodes dont j'ai besoin dans plusieurs contrôles de base auxquels je n'aurais pas accès. (Parce que nous ne pouvons pas hériter de plusieurs contrôleurs de base).

Mon autre idée consiste à déplacer la fonctionnalité commune dans leurs propres classes, en dehors du dossier Controller.

Que feriez-vous? Existe-t-il un excellent moyen pour ASP.NET MVC de partager du code comme celui-ci que je ne connais pas encore?

Répondre

14

Il y a une règle générale sur la programmation orientée objet que vous devriez composition faveur de l'héritage, et il va très bien dans ce scénario.

Je voudrais créer un ou plusieurs services qui encapsulent les méthodes en question, puis consomment ces services à partir des contrôleurs.

Pour des points supplémentaires, extrayez une interface du (des) service (s) concerné (s) et injectez l'interface dans les contrôleurs pour une séparation maximale des problèmes.

+0

J'ai un scénario légèrement différent. J'ai plusieurs applications Web dont les contrôleurs de connexion ont _ exactement le même code_. Les différences entre les systèmes de connexion de ces applications sont limitées à leurs fichiers 'web.config'. Je voudrais avoir une classe de contrôleur de connexion partagée dans un projet séparé qui serait référencé par mes applications Web. Est-ce possible? – pyon

+0

Oui. Je code toujours tous mes contrôleurs dans des bibliothèques séparées. –

+0

Nice. Et qu'en est-il des vues? – pyon

4

Je prendrais en compte une classe d'aide ou quelque chose comme ça. D'après ce que vous avez décrit la fonctionnalité aide les contrôleurs/

1

Les choix semblent être le contrôleur de base ou la classe auxiliaire. Vous pouvez prendre le contrôle de la création du contrôleur et injecter l'assistant dans les contrôleurs qui en ont besoin.

Questions connexes