Warum die erzeugten NinjectMVC3.cs von NuPack kompilieren nicht? (Oder, was passiert ist, um MvcServiceLocator in ASP.NET MVC 3 Beta?)

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

  •  28-09-2019
  •  | 
  •  

Frage

Mit dem NuPack Addin und der Installation des ninject MVC 3-Paket führt zu dem folgenden Compiler-Fehler in der generierten NinjectMVC3.cs Datei.

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

Das Beispielvideo David Ebbo zeigt posted es just fine um 09:43 Uhr arbeiten.

Hier ist die aktuell generierte Klasse:

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));
    }
}
War es hilfreich?

Lösung

Im Grunde genommen hat MvcServiceLocator weggegangen. Jedes Mal, wenn das Video gemacht wurde ein Konflikt in Versionen war, denke ich.

Es gibt gute Erklärungen zur Verfügung hier und hier .

Die beiden Schritte, die Ninject Arbeit machen wird, sind wie folgt. Ersetzen NinjectMVC3 mit dem folgenden (ich auch den Namen geändert, die nicht notwendig ist):

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);
    }
}

und fügen Sie die folgende Zeile zu App_Start() in gloabl.asax.cs

DependencyResolver.SetResolver(new NinjectResolver());

Andere Tipps

Ich habe das Paket, und an den Feed hochgeladen. Es wäre toll, wenn Sie eine Chance haben, es zu versuchen und sicherzustellen, dass es jetzt funktioniert. Ich steigerte die Version von Ninject.MVC3 0,1-0,2:)

Ich habe gerade installiert Ninject.MVC3 0.3. Ich bin mit ASP.NET MVC 3 Beta.

Ich habe diesen Code in meine Global.asax.cs Datei hinzugefügt:

    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));
    }

Und ich habe einen Anruf zu SetupDependencyInjection() in Application_Start() Funktion hinzugefügt, so dass es wie folgt aussieht:

    protected void Application_Start()
    {
        SetupDependencyInjection();

        AreaRegistration.RegisterAllAreas();

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

Die IProductRepository und SqlProductRepository sind Klassen, die ich in meinen Models Ordner und ich habe einen Konstruktor Abhängigkeit meiner HomeController hinzugefügt. Hier ist der Code:

    private IProductRepository products;

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

Ich habe einige Stützpunkte hinzugefügt und lief die Anwendung und es funktioniert wie ein Charme. Hoffe, das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top