2010-10-06 69 views
7

使用NuPack插件並安裝NInject MVC 3軟件包會在生成的NinjectMVC3.cs文件中產生以下編譯錯誤。爲什麼NuPack生成的NinjectMVC3.cs不能編譯? (或ASP.NET MVC 3 Beta中的MvcServiceLocator發生了什麼?)

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

sample video大衛博發佈顯示它working just fine at 09:43

這裏是目前生成的類:

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

回答

13

基本上,MvcServiceLocator已經消失。每當製作視頻時,我都會發現版本不匹配。

有很好的解釋可用herehere

Ninject工作的兩個步驟如下。替換爲以下NinjectMVC3(I也改變這是沒有必要的名稱):

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

和添加下列行來App_Start()gloabl.asax.cs

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

是的! NuPack軟件包基於MVC 3 Preview 1,需要更新。謝謝! – 2010-10-06 18:18:56

+0

我會盡力讓今天晚些時候修復的實時包,謝謝! – 2010-10-06 18:21:24

5

我有固定的包並將其上傳到飼料。如果您有機會嘗試並驗證它現在可行,那將是非常好的。我把Ninject.MVC3的版本從0.1提高到0.2 :)

+0

這兩個版本Ninject.MVC(0.1和0.2)是否出現在添加包參考GUI中?新的(0.2)肯定會按預期構建。 – Jedidja 2010-10-06 20:14:01

+0

不,它不應該。用戶界面仍處於早期狀態。這或多或少只是一個原型。 – 2010-10-06 20:57:52

+2

實際上,它編譯,但試圖運行代碼,我得到不能從程序集'System.Web.Mvc,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35加載類型'System.Web.Mvc.IMvcServiceLocator' 」。 – Jedidja 2010-10-06 21:14:24

1

我剛剛安裝了Ninject.MVC3 0.3。我正在使用ASP.NET MVC 3 Beta。

我已經添加了這些代碼融入到我的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)); 
    } 

而且我已經加入到SetupDependencyInjection()打電話到Application_Start()功能,所以它看起來像這樣:

protected void Application_Start() 
    { 
     SetupDependencyInjection(); 

     AreaRegistration.RegisterAllAreas(); 

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

IProductRepositorySqlProductRepository是我在Models文件夾中創建的類,並且我在HomeController中添加了構造函數依賴項。這裏的代碼:

private IProductRepository products; 

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

我已經添加了一些斷點,運行應用程序,它的作品就像一個魅力。希望這可以幫助。