我已经创建了一个MVC 4 web应用程序,并决定在这个应用程序中使用web api。我正在为MVC web应用程序使用ninject依赖解析程序。现在我想使用这个用于web api的ninject依赖解析程序。但这里提出的问题是mvc IDependencyResolver命名空间是:using System.Web.Mvc
web api IDdependencyResolver是using System.Web.Http.Dependencies
那么我该如何解决这个问题呢?
最后我想要这样的东西:
// Use the container and the NinjectDependencyResolver as
// application's resolver
var resolver = new NinjectDependencyResolver(container);
//Register Resolver for MVC
DependencyResolver.SetResolver(resolver);
//Register Resolver for Web Api
GlobalConfiguration.Configuration.DependencyResolver = resolver;
有一种方法可以在MVC和ASP.NET Web API之间共享相同的容器。您只需要实现这两个接口。
public class NinjectDependencyResolver : NinjectDependencyScope, IDependencyResolver, System.Web.Mvc.IDependencyResolver
{
private readonly IKernel kernel;
public NinjectDependencyResolver(IKernel kernel)
: base(kernel)
{
this.kernel = kernel;
}
public IDependencyScope BeginScope()
{
return new NinjectDependencyScope(this.kernel.BeginBlock());
}
}
查看本文以获取解决方案:在MVC和Web API 之间共享依赖关系解析程序的简单方法
有一个NuGet包可以做到这一点。将NInject.Web.Common、NInject.MVCx和WebApiContrrib.IoC.NInject-NuGet包添加到您的项目中。应该在App_Start文件夹中创建一个NInjectWebCommon类。将依赖项的绑定添加到RegisterServices方法。在RegisterServices(内核)调用之后的CreateKernel方法中,添加以下行:
GlobalConfiguration.Configuration.DependencyResolver = new NinjectResolver(kernel);
这将允许您创建Ninject依赖关系解析程序,而不必创建自己的覆盖类。很简单,对吧?