2010-10-06 7 views
7

Użycie dodatku NuPack i zainstalowanie pakietu NInject MVC 3 powoduje następujący błąd kompilacji w wygenerowanym pliku NinjectMVC3.cs.Dlaczego wygenerowany NinjectMVC3.cs z NuPack nie jest kompilowany? (lub co się stało z MvcServiceLocator w ASP.NET MVC 3 Beta?)

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

sample video David Ebbo pisał pokazuje to working just fine at 09:43.

Oto aktualnie generowane klasa:

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

Odpowiedz

13

Zasadniczo MvcServiceLocator zniknął. Ilekroć wideo zostało zrobione, było chyba niedopasowanie w wersjach. Dostępne są doskonałe wyjaśnienia: here i here.

Dwa kroki, które sprawią, że praca Ninject będzie następująca. Wymienić NinjectMVC3 z poniższych (ja również zmienił nazwę, która nie jest konieczna):

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

i dodaj następującą linię do App_Start() w gloabl.asax.cs

DependencyResolver.SetResolver(new NinjectResolver()); 
+0

Tak! Pakiet NuPack został oparty na MVC 3 Preview 1 i wymaga aktualizacji. Dzięki! –

+0

Postaram się, aby pakiet na żywo został naprawiony jeszcze dziś, dzięki! –

5

Mam ustalony pakiet i wysłał go do kanał. Byłoby wspaniale, gdybyś miał okazję spróbować i sprawdzić, czy teraz działa. Podniosłem wersję Ninject.MVC3 z 0.1 do 0.2 :)

+0

Czy obie wersje Ninject.MVC (0.1 i 0.2) pojawią się w interfejsie GUI dodawania pakietu? Nowy (0,2) zdecydowanie rozwija się zgodnie z oczekiwaniami. – Jedidja

+0

Nie, nie powinno. Interfejs użytkownika jest nadal w bardzo wczesnym kształcie. Jest to mniej więcej prototyp. –

+2

Właściwie to zostało skompilowane, ale próbuję uruchomić kod, otrzymuję Nie można załadować typu "System.Web.Mvc.IMvcServiceLocator" z zestawu "System.Web.Mvc, wersja = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 ". – Jedidja

1

Właśnie zainstalowałem Ninject.MVC3 0.3. Używam ASP.NET MVC 3 Beta.

Dodałem ten kod do mojego Global.asax.cs pliku:

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

I dodałem wywołanie SetupDependencyInjection() do Application_Start() funkcji więc wygląda to tak:

protected void Application_Start() 
    { 
     SetupDependencyInjection(); 

     AreaRegistration.RegisterAllAreas(); 

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

IProductRepository i SqlProductRepository to klasy, które utworzyłem w folderze Moje modele i dodałem zależność od konstruktora do mojego HomeController. Oto kod:

private IProductRepository products; 

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

Dodałem kilka przerwań i uruchomiłem aplikację i działa jak urok. Mam nadzieję że to pomoże.

Powiązane problemy