为什么来自Nupack的生成的NinjectMVC3.C不编译? (或者在ASP.NET MVC 3 beta中发生的MVCServicElocator发生了什么?)

StackOverflow https://stackoverflow.com/questions/3875457

  •  28-09-2019
  •  | 
  •  

使用nupack addin并安装ninject MVC 3软件包导致生成的编译错误 NinjectMVC3.cs 文件。

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

示例视频 大卫·埃博(David Ebbo)发布了 在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));
    }
}
有帮助吗?

解决方案

基本上, MvcServiceLocator 已经消失了。我想,每当视频制作时,版本都有不匹配。

有很好的解释 这里这里.

将使NINIGENT工作的两个步骤如下。代替 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());

其他提示

我已经修复了包裹并将其上传到供稿。如果您有机会尝试并验证它现在起作用,那就太好了。我将ninject.mvc3的版本从0.1到0.2 :)

我刚刚安装了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 是我在型号文件夹中上课的类,我已经在我的 HomeController. 。这是代码:

    private IProductRepository products;

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

我添加了一些断点并运行了应用程序,它就像魅力一样工作。希望这可以帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top