我有一个简单的MVC4站点,它使用ASP.NET webAPI和MVC页面。
我想将Ninject DI用于两种控制器类型,但我想知道如何做到这一点?
我有Ninject DI为WebAPI工作,但现在不确定如何优雅地共享相同的内核。
我应该使用某种内核单例,这两个依赖解析器都可以引用吗?
有人有过这方面的经验吗?
干杯。
答案 0 :(得分:3)
您应该对单个应用程序级组合根使用相同的IKernel
实例,可以是WebApi
或MVC
控制器。
如果您使用的是Ninject.MVC3套餐:
在NinjectWebCommon.cs
文件夹中的App_Start
内初始化内核时,您已经可以访问它。对于MVC控制器,您无需为Ninject DI执行任何其他操作。
但对于WebAPI
控制器,您需要使用DependencyResolver
将依赖项注入控制器。使用this implementation作为此解析程序,然后将其设置为所有WebAPI
控制器的解析程序,如下所示:
将NinjectDependencyResolver
绑定到RegisterServices
内NinjectWebCommon.cs
内的kernel.Bind<NinjectDependencyResolver>().ToSelf();
自我(可选):
WepAPI
设置WebApiConfig.cs
配置以使用解析器,通常位于public static void Register(HttpConfiguration config)
{
//Other initialization code
config.DependencyResolver = (new Bootstrapper()).Kernel.Get<NinjectDependencyResolver>();
}
内:
IKernel
这适用于所有共享相同{{1}}的控制器的场景。
希望有所帮助!
答案 1 :(得分:0)
是的,你是对的。应用程序应该有一个内核/容器,因为这将在将来消除可能的错误。如果是多个内核,您可以在内核中注册接口,然后尝试使用另一个内核解析它,程序崩溃。只有花时间调试后,你才能找出问题所在。
此外,使用单个内核,您不必多次注册相同的实现。