J'essaie de créer une application ASP.NET MVC en utilisant Spring.NET pour injecter des dépendances. L'application comporte trois niveaux: Contrôleur, Service et Données.Dépendances de Spring.NET non injectées
J'ai défini les objets dans le fichier "~ \ Resources \ objects.xml".
Mon premier objet, UserAccountController, requiert l'injecion de deux classes de niveau Service: UserAccountService et DepartmentService. Ainsi, la définition objects.xml ressemble à ceci:
<object id="UserAccountController" type="App.Controllers.UserAccountController, App">
<constructor-arg index="0" ref="DepartmentService" />
<constructor-arg index="1" ref="UserAccountService" />
</object>
<object id="UserAccountService" type="App.Service.UserAccountService, App">
<property name="UserAccountDao" ref="UserAccountDao" />
</object>
<object id="UserAccountDao" type="App.Data.UserAccountDao, App" />
<object id="DepartmentService" type="App.Service.DepartmentService, App">
<property name="DepartmentDao" ref="DepartmentDao" />
</object>
<object id="DepartmentDao" type="App.Data.DepartmentDao" />
Webconfig contient ceci:
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.WebContextHandler, Spring.Web"/>
</sectionGroup>
</configSections>
<spring>
<context>
<resource uri="~/Resources/objects.xml" />
</context>
</spring>
Je préférerais utiliser l'injection de la propriété plutôt que constructeur, mais actuellement aucune méthode fonctionne.
J'ai en fait une classe SpringApplicationController et une classe de ControllerFactory de printemps, et les référence dans Global.asax .cs: ControllerBuilder.Current.SetControllerFactory (typeof (App.Util.SpringControllerFactory)); Dois-je toujours obtenir le contexte si j'utilise cette méthode? – Jason
honnêtement, je ne sais pas. Mais évidemment pas. La meilleure pratique pour Inversion of Control est de charger le conteneur au début de l'application et de ne pas avoir d'autres références au conteneur. Si la configuration est bien faite, appelez ContextRegistry.getContext(); devrait gérer tout – Fabiano
D'accord, j'ai jeté les implémentations fantaisistes de ControllerFactory et ApplicationContext en faveur d'un simple appel à ContextRegistry.getContext(), et je suis revenu à l'habituel ContextHandler dans web.config. Toujours pas de chance pour l'injection. – Jason