2010-10-06 16 views
7

Sử dụng trình bổ sung NuPack và cài đặt gói NInject MVC 3 dẫn đến lỗi biên dịch sau trong tệp NinjectMVC3.cs được tạo.Tại sao NinjectMVC3.cs được tạo ra từ NuPack không biên dịch? (hoặc những gì đã xảy ra với MvcServiceLocator trong ASP.NET MVC 3 Beta?)

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

Các sample video David Ebbo posted thấy nó working just fine at 09:43.

Đây là lớp hiện tạo:

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

Trả lời

13

Về cơ bản, MvcServiceLocator đã biến mất. Bất cứ khi nào video được tạo ra có sự không phù hợp trong các phiên bản, tôi đoán vậy.

Có những giải thích tuyệt vời có sẵn herehere.

Hai bước sẽ thực hiện công việc Ninject như sau. Thay NinjectMVC3 với những điều sau đây (tôi cũng đã thay đổi tên mà không phải là cần thiết):

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

và thêm dòng sau vào App_Start() trong gloabl.asax.cs

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

Đúng! Gói NuPack được dựa trên MVC 3 Preview 1 và cần được cập nhật. Cảm ơn! –

+0

Tôi sẽ cố gắng để có được các gói phần mềm trực tiếp cố định sau ngày hôm nay, cảm ơn! –

5

Tôi đã cố định các gói và tải lên nó để thức ăn. Nó sẽ là tuyệt vời nếu bạn đã có cơ hội để thử nó và xác minh rằng nó hoạt động ngay bây giờ. Tôi đã nâng phiên bản Ninject.MVC3 từ 0,1 lên 0,2 :)

+0

Cả hai phiên bản Ninject.MVC (0,1 và 0,2) có xuất hiện trong Giao diện Thêm gói tham chiếu không? Cái mới (0.2) chắc chắn được xây dựng như mong đợi. – Jedidja

+0

Không, không nên. Giao diện người dùng vẫn ở dạng rất sớm. Đó là nhiều hơn hoặc ít hơn chỉ là một nguyên mẫu. –

+2

Trên thực tế, nó được biên soạn, nhưng cố gắng chạy mã, tôi nhận được Không thể tải loại 'System.Web.Mvc.IMvcServiceLocator' từ assembly 'System.Web.Mvc, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 '. – Jedidja

1

Tôi vừa cài đặt Ninject.MVC3 0.3. Tôi đang sử dụng ASP.NET MVC 3 Beta.

Tôi đã thêm mã này vào Global.asax.cs tập tin của tôi:

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

Và tôi đã thêm một cuộc gọi đến SetupDependencyInjection() vào Application_Start() chức năng để nó trông như thế này:

protected void Application_Start() 
    { 
     SetupDependencyInjection(); 

     AreaRegistration.RegisterAllAreas(); 

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

Các IProductRepositorySqlProductRepository là các lớp mà tôi đã tạo trong thư mục Mô hình của mình và tôi đã thêm một phụ thuộc hàm dựng vào HomeController của mình. Đây là mã:

private IProductRepository products; 

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

Tôi đã thêm một số điểm ngắt và chạy ứng dụng và nó hoạt động như một nét duyên dáng. Hi vọng điêu nay co ich.

Các vấn đề liên quan