在WebAPI和MVC之间共享内核

时间:2014-02-03 05:37:00

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

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

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

我有Ninject DI为WebAPI工作,但现在不确定如何优雅地共享相同的内核。

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

有人有过这方面的经验吗?

干杯。

2 个答案:

答案 0 :(得分:3)

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

如果您使用的是Ninject.MVC3套餐:

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

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

  1. NinjectDependencyResolver绑定到RegisterServicesNinjectWebCommon.cs内的kernel.Bind<NinjectDependencyResolver>().ToSelf(); 自我(可选):

    WepAPI
  2. 设置WebApiConfig.cs配置以使用解析器,通常位于public static void Register(HttpConfiguration config) { //Other initialization code config.DependencyResolver = (new Bootstrapper()).Kernel.Get<NinjectDependencyResolver>(); } 内:

    IKernel
  3. 这适用于所有共享相同{{1}}的控制器的场景。

    希望有所帮助!

答案 1 :(得分:0)

是的,你是对的。应用程序应该有一个内核/容器,因为这将在将来消除可能的错误。如果是多个内核,您可以在内核中注册接口,然后尝试使用另一个内核解析它,程序崩溃。只有花时间调试后,你才能找出问题所在。

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