ninject - Warum wird das von NuPack generierte NinjectMVC3.cs nicht kompiliert? (oder was ist mit MvcServiceLocator in ASP.NET MVC 3 Beta passiert?)

Translate

Die Verwendung des NuPack-Add-Ins und die Installation des NInject MVC 3-Pakets führt zu dem folgenden Kompilierungsfehler im generiertenNinjectMVC3.csDatei.

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

DasBeispielvideoDavid Ebbo hat es gezeigtfunktioniert gut um 09:43.

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));
    }
}
This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Grundsätzlich,MvcServiceLocatorist weggegangen. Wann immer das Video gemacht wurde, gab es vermutlich eine Nichtübereinstimmung in den Versionen.

Es gibt ausgezeichnete ErklärungenHierundHier.

Die beiden Schritte, mit denen Ninject funktioniert, sind folgende. ErsetzenNinjectMVC3mit folgendem (ich habe auch den Namen geändert, der 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 hinzuApp_Start()imgloabl.asax.cs

DependencyResolver.SetResolver(new NinjectResolver());
Quelle
Translate

Ich habe das Paket repariert und in den Feed hochgeladen. Es wäre großartig, wenn Sie die Gelegenheit hätten, es zu versuchen und zu überprüfen, ob es jetzt funktioniert. Ich habe die Version von Ninject.MVC3 von 0.1 auf 0.2 erhöht :)

Quelle
Translate

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

Ich habe diesen Code zu meinem hinzugefügtGlobal.asax.csDatei:

    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 hinzugefügtSetupDependencyInjection()inApplication_Start()Funktion so sieht es aus:

    protected void Application_Start()
    {
        SetupDependencyInjection();

        AreaRegistration.RegisterAllAreas();

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

DasIProductRepositoryundSqlProductRepositorysind Klassen, die ich in meinem Modellordner erstellt habe und denen ich eine Konstruktorabhängigkeit hinzugefügt habeHomeController. Hier ist der Code:

    private IProductRepository products;

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

Ich habe einige Haltepunkte hinzugefügt und die Anwendung ausgeführt, und sie funktioniert wie ein Zauber. Hoffe das hilft.

Quelle
Über den Autor