2010-04-10 12 views
0

Vous vous êtes tapé depuis quelques mois et vous avez décidé de vous lancer avec une question. Je suis très nouveau à Windsor et à IoC en général. Je peux obtenir Windsor pour travailler avec mon projet MVC2 sans problème. Le projet sur lequel je travaille est un "portail" de plusieurs applications sous un projet MVC2 utilisant le nouveau concept Areas. Dans ce scénario, chaque zone sera en fait une application distincte à l'intérieur du "portail". Nous faisons cela pour partager efficacement BEAUCOUP de code commun, de vues, d'authentification et de fonctionnalités inter-applications. Beaucoup de nos applications sont liées les unes aux autres, il est donc logique de les combiner en un seul projet.Château Windsor avec ASP.NET MVC 2 Zones

Ce que je me demande comment faire est d'autoriser différentes zones à injecter différentes classes de béton? Dans ma compréhension limitée, l'Application_Start régit la construction du conteneur et l'assignation comme usine de contrôleur. Je ne veux pas nécessairement faire toute l'injection au niveau de l'application. Nous avons un système de configuration où nous avons un fichier config.xml à la racine de chaque Area et ces paramètres remplacent tous les paramètres root. Je voudrais continuer cette tendance en faisant en sorte que les injections pour chaque Zone soient lues par le fichier config.xml de la Zone (un héritage similaire à Webforms web.config où la configuration dans un dossier inférieur remplace les paramètres dans un dossier parent). Exemple: J'aurais un ILogHandler qui aurait besoin d'une implémentation concrète différente en fonction de la zone de l'application dans laquelle je suis. Donc, j'aurais besoin d'injecter quelque chose de différent selon l'endroit où je suis dans l'application. Je peux facilement faire cela en utilisant des usines puisque chaque zone pourrait avoir son propre ensemble d'usines, mais j'essaie de saisir cette occasion pour en apprendre davantage sur IoC et quels sont les avantages/inconvénients. Toute aide serait appréciée.

+0

Avez-vous commencé à regarder dans la classe ControllerBuilder et WindsorControllerFactory? –

+0

J'ai (dans la mesure où je le comprends jusqu'à présent). J'ai regardé le droit WindsorControllerFactory et les usines à l'intérieur de MvcContrib. Si la réponse est à l'intérieur, je dois absolument faire d'autres recherches. Comme je l'ai dit, je suis super-nouveau à IoC. Suggérez-vous qu'il existe peut-être un moyen à l'intérieur de WindsorControllerFactory d'ajouter dynamiquement des fichiers de configuration de composants? Si oui, je n'ai certainement pas pensé à ça. –

Répondre

0

Juste FYI - vous devez absolument pas avoir un code de sécurité spécifique à la zone. Par exemple, une usine ou un invocateur qui injecte des attributs [Authorize] en fonction de la zone en cours pourrait ouvrir votre application à l'attaque. Comparez-le avec un contrôleur MyAreaBaseController, que tous les contrôleurs de votre région doivent sous-classer. Les attributs [Authorize] (et tout autre code relatif à la sécurité) sont OK car ils sont appliqués au type et sont indépendants de tout concept de "zone".

+0

D'accord. Tout notre code de sécurité est et sera toujours commun dans les zones racine. Nous avons des contrôleurs de base, mais rien de ce dont je parle ne concerne la sécurité. Nous avons en fait écrit nos propres attributs qui sont à l'échelle du système pour gérer la sécurité et n'auront rien à voir avec le conteneur IoC. Ma question concerne les objets au niveau du domaine comme les événements, la journalisation, etc. Merci pour le conseil! –