【问题标题】:Share a Kernel between WebAPI and MVC在 WebAPI 和 MVC 之间共享内核
【发布时间】:2014-02-26 12:42:15
【问题描述】:

我有一个简单的 MVC4 网站,它使用 ASP.NET webAPI 和 MVC 页面。

我想对这两种控制器类型都使用 Ninject DI,但我想知道如何做到这一点?

我让 Ninject DI 为 WebAPI 工作,但现在不知道如何优雅地共享同一个内核。

我应该使用依赖解析器都可以引用的某种内核单例吗?

有人有这方面的经验吗?

干杯。

【问题讨论】:

    标签: asp.net-mvc-4 asp.net-web-api ninject ninject.web.mvc


    【解决方案1】:

    您应该为单个应用程序级组合根使用相同的 IKernel 实例,可以是 WebApiMVC 控制器。

    如果您使用的是 Ninject.MVC3 包:

    当内核在App_Start 文件夹内的NinjectWebCommon.cs 中初始化时,您已经可以访问它了。对于 MVC 控制器,您无需为 Ninject DI 执行任何其他操作。

    但是对于WebAPI 控制器,您需要使用DependencyResolver 将依赖项注入您的控制器。将此解析器使用 this implementation,然后将其设置为所有 WebAPI 控制器的解析器,如下所示:

    1. NinjectDependencyResolver 绑定到self(可选),在NinjectWebCommon.cs 中的RegisterServices 内:

      kernel.Bind<NinjectDependencyResolver>().ToSelf();
      
    2. 设置WepAPI 配置以使用您的解析器,通常在WebApiConfig.cs 内:

      public static void Register(HttpConfiguration config)
      {
          //Other initialization code
          config.DependencyResolver = (new   Bootstrapper()).Kernel.Get<NinjectDependencyResolver>();
      }
      

    这将适合共享相同IKernel 的所有控制器的场景。

    希望有帮助!

    【讨论】:

    【解决方案2】:

    是的,你是对的。一个应用应该有一个kernel/container,这样可以避免以后可能出现的错误.只有在花时间调试之后,你才能找出问题所在等等。

    此外,使用单个内核,您不必多次注册同一个实现。

    【讨论】:

      猜你喜欢
      • 2017-07-16
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      • 2014-10-27
      • 2016-11-30
      • 2014-08-11
      • 2011-12-16
      相关资源
      最近更新 更多