代码之家  ›  专栏  ›  技术社区  ›  Jedidja

为什么从nupack生成的ninjectmvc3.cs不编译?(或者ASP.NET MVC 3 Beta中的MVCSServiceLocator发生了什么?)

  •  7
  • Jedidja  · 技术社区  · 14 年前

    使用nupack加载项并安装ninject mvc 3包会导致生成的 NinjectMVC3.cs 文件。

    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));
        }
    }
    
    3 回复  |  直到 14 年前
        1
  •  13
  •   Jedidja    14 年前

    基本上, MvcServiceLocator 已经离去。我猜,每当制作视频时,版本都不匹配。

    有很好的解释 here here .

    这两个步骤将使Ninject工作如下。替换 NinjectMVC3 使用以下内容(我还更改了不需要的名称):

    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());
    
        2
  •  5
  •   David Ebbo    14 年前

    我已经修复了这个包并将其上载到提要。如果你有机会尝试一下并验证一下它现在是否有效的话,那就太好了。我把ninject.mvc3的版本从0.1提高到0.2:。

        3
  •  1
  •   gligoran zz-sergant    14 年前

    我刚安装了ninject.mvc3 0.3。我正在使用ASP.NET MVC 3测试版。

    我已将此代码添加到 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);
        }
    

    这个 IProductRepository SqlProductRepository 是我在Models文件夹中创建的类,并且我已将构造函数依赖项添加到 HomeController . 代码如下:

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

    我添加了一些断点并运行了应用程序,它的工作方式很有魅力。希望这有帮助。