Je suis en train de mettre à niveau une application web de ASP.NET 3 Preview 1 vers RTM et je suis confus par l'approche mise à jour de l'injection de dépendances. J'utilise StructureMap pour cela mais ce n'est pas vraiment pertinent pour ma question. Auparavant, tout ce que je devais faire était comme suit:Comment configurer l'injection de dépendances avec ASP.NET MVC 3 RTM
x.For<IControllerFactory>().Use<DefaultControllerFactory>();
x.For<IServiceLocator>().Use(MvcServiceLocator.Current);
Maintenant, il semble que je dois fournir des implémentations de IControllerActivator, IViewPageActivator et ModelMetadataProvider parce que sinon je reçois une erreur de StructureMap parce que MVC tente de les localiser en utilisant le résolveur de dépendance . D'un coup d'œil à la source MVC, il ne semble pas y avoir d'implémentations par défaut publiques. Ai-je manqué quelque chose en les mettant en place? Sûrement ceux-ci devraient être configurés par convention? Des exemples de ce qui a besoin de configuration et comment avec StructureMap seraient appréciés.
Pour référence, je suis actuellement en utilisant la bidouille laide suivante qui force MVC à utiliser ses défauts internes:
x.For<IControllerFactory>().Use<DefaultControllerFactory>();
x.For<IDependencyResolver>().Use(() => DependencyResolver.Current);
x.For<IControllerActivator>().Use(() => null);
x.For<IViewPageActivator>().Use(() => null);
x.For<ModelMetadataProvider>().Use(ModelMetadataProviders.Current);
EDIT: Pour être clair, j'ai une implémentation StructureMap travail de la dépendance résolveur - la question est pourquoi MVC se plaint à propos de toutes ces interfaces ne sont pas configurés dans le conteneur.
Voilà comment je l'ai mis en place aussi, et il fonctionne pour moi.Mais je ne suis pas sûr de savoir comment cela est différent des versions précédentes où nous avons utilisé une sous-classe de DefaultControllerFactory et qui a été définie dans un appel à la propriété Current de ControllerBuilder – Hakeem
Travaillez-vous avec la version RTM? Avez-vous un code d'installation pertinent dans vos registres? Si j'exécute du code comme ci-dessus, j'obtiens une exception StructureMap indiquant qu'aucune instance par défaut d'IControllerFactory n'est définie. –
Hakeem - Sous-classe DefaultControllerFactory ne nous a fourni que la prise en charge de l'injection de dépendances pour les contrôleurs. Dans MVC3, l'utilisation de DependencyResolver.SetResolver nous permet de prendre en charge l'injection de dépendances pour de nombreuses zones de la structure MVC, y compris les contrôleurs, les vues, les filtres d'action et les classeurs de modèle. –