Pourquoi les NinjectMVC3.cs générés à partir NuPack ne compilera pas? (Ou ce qui est arrivé à MvcServiceLocator dans ASP.NET MVC 3 Beta?)

StackOverflow https://stackoverflow.com/questions/3875457

  •  28-09-2019
  •  | 
  •  

Question

Utilisation du complément NuPack et en installant les résultats du paquet Ninject MVC 3 dans l'erreur de compilation suivante dans le fichier NinjectMVC3.cs généré.

The name 'MvcServiceLocator' does not exist in the current context

Le vidéo échantillon David Ebbo a affiché le montre fonctionne très bien à 09:43 .

Voici la classe actuellement générée:

public class NinjectMVC3 {
    public static void RegisterServices(IKernel kernel) {
        //kernel.Bind<IThingRepository>().To<SqlThingRepository>();
    }

    public static void SetupDependencyInjection() {
        // Create Ninject DI Kernel 
        IKernel kernel = new StandardKernel();

        // Register services with our Ninject DI Container
        RegisterServices(kernel);

        // Tell ASP.NET MVC 3 to use our Ninject DI Container 
        MvcServiceLocator.SetCurrent(new NinjectServiceLocator(kernel));
    }
}
Était-ce utile?

La solution

En fait, MvcServiceLocator a disparu. Chaque fois que la vidéo a été faite il y avait un décalage dans les versions, je suppose.

Il y a d'excellentes explications disponibles et ici .

Les deux étapes qui feront le travail Ninject sont les suivantes. Remplacer NinjectMVC3 par ce qui suit (j'ai aussi changé le nom qui est pas nécessaire):

public class NinjectResolver : IDependencyResolver
{
    private static IKernel kernel;

    public NinjectResolver()
    {
        kernel = new StandardKernel();
        RegisterServices(kernel);
    }

    public static void RegisterServices(IKernel kernel)
    {
        //kernel.Bind<IThingRepository>().To<SqlThingRepository>();
    }

    public object GetService(Type serviceType)
    {
        return kernel.TryGet(serviceType);
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        return kernel.GetAll(serviceType);
    }
}

et ajoutez la ligne suivante à App_Start() dans gloabl.asax.cs

DependencyResolver.SetResolver(new NinjectResolver());

Autres conseils

I ont fixé l'emballage et transféré sur la charge. Ce serait génial si vous avez eu la chance de l'essayer et vérifier que cela fonctionne maintenant. I a augmenté la version de Ninject.MVC3 0,1 à 0,2:)

Je viens installé Ninject.MVC3 0,3. J'utilise ASP.NET MVC 3 Beta.

J'ai ajouté ce code dans mon fichier Global.asax.cs:

    public static void RegisterServices(IKernel kernel)
    {
        kernel.Bind<IProductRepository>().To<SqlProductRepository>();
    }

    public void SetupDependencyInjection()
    {
        IKernel kernel = new StandardKernel();
        RegisterServices(kernel);
        DependencyResolver.SetResolver(new Ninject.Mvc3.NinjectServiceLocator(kernel));
    }

Et j'ai ajouté un appel à SetupDependencyInjection() en fonction Application_Start() il ressemble à ceci:

    protected void Application_Start()
    {
        SetupDependencyInjection();

        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }

Le IProductRepository et SqlProductRepository sont des classes que je faisais dans mon dossier Modèles et j'ai ajouté une dépendance constructeur à mon HomeController. Voici le code:

    private IProductRepository products;

    public HomeController(IProductRepository productRepository)
    {
        products = productRepository;
    }

J'ai ajouté quelques points d'arrêt et a couru l'application et il fonctionne comme un charme. Espérons que cela aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top