2012-09-13 8 views
9

J'ai une application MVC3 que j'aimerais transférer sur MVC4. J'utilise Ninject pour l'injection de dépendance. En utilisant Nuget, j'ai ajouté « Ninject » à mon projet et créé une usine de contrôleur comme indiqué ci-dessousNinject et asp.net MVC4

public class NinjectControllerFactory : DefaultControllerFactory 
{ 
    private IKernel ninjectKernel; 

    public NinjectControllerFactory() 
    { 
     ninjectKernel = new StandardKernel(); 
     AddBindings(); 
    } 

    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) 
    { 
     return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType); 
    } 

    private void AddBindings() 
    { 
     //Add ninject bindings here 
    } 
} 

Cela fonctionne bien pour MVC3, mais les choses ont changé dans MVC4. Je l'ai fait quelques recherches et a trouvé ce lien qui explique comment obtenir ninject travailler pour MVC4

http://haacked.com/archive/2012/03/11/itrsquos-the-little-things-about-asp-net-mvc-4.aspx

Cependant, je ne parviens pas à obtenir le code dans le lien ci-dessus pour compiler. Plus précisément, le code que je suis censé placer dans la méthode Start() du fichier web.common me donne des erreurs d'espace de noms non résolus

GlobalConfiguration.Configuration.ServiceResolver 
    .SetResolver(DependencyResolver.Current.ToServiceResolver()); 

deux « ServiceResolver » et « .SetResolver » ne sont pas résolus. Quelles références dois-je ajouter pour les activer? Aussi, si possible pouvez-vous me diriger vers un tutoriel me montrant comment faire fonctionner ninject dans MVC4 sans avoir à installer le paquet nuget ninject.mvc3? Je demande parce que je préférerais ne pas avoir des paquets installés dans mon application qui ont été écrits pour MVC3 spécifiquement pour éviter des choses de dégrader la ligne si ces paquets de nuget sont mis à jour.

modifier: Je aurais dû ajouter que je suis en utilisant Visual Studio 2012 et l'article .Net 4.5

Répondre

14

Phil est sur l'utilisation Ninject avec WebAPI. C'est ce que tu veux dire? Vous n'avez pas besoin de faire cela pour une injection MVC normale. En outre, vous devriez utiliser le paquet Ninject.MVC3 NuGet avec MVC4 (oui, je sais que c'est MVC3, mais ça fonctionne toujours bien parce que NuGet configure des redirections de version d'assemblage qui font tout fonctionner), cela règle tout et vous ne t besoin d'une usine de contrôleur. Il suffit de modifier le fichier NinjectWebCommon.cs pour ajouter vos liaisons.

+1

Je ne WebAPI besoin. Où dois-je ajouter mes liaisons dans NinjectWebCommon.cs? Dans la méthode "start"? En outre, voyez-vous un potentiel pour les mises à jour du paquet ninject.mvc3 brisant mon application? Merci –

+0

@curiouspanda - Les mises à jour peuvent toujours casser des choses, et Ninject a traversé quelques itérations qui ont changé la façon "préférée" de travailler avec, mais en général le code devrait rester compatible. Si vous n'utilisez pas WebAPI, l'article de Phil ne s'applique pas. Vous enregistrez vos mappages dans la méthode RegisterServices de NinjectWebCommon.cs –

0

Tout simplement Ajouter namespace

Using Ninject; 

après l'installation de modèle à partir Nuget ... U juste installer "Ninject" mais pas "Ninject pour MVC3" de Nuget Modèle