对MVC和WebAPI都使用ninject-dependecyResolver



我已经创建了一个MVC 4 web应用程序,并决定在这个应用程序中使用web api。我正在为MVC web应用程序使用ninject依赖解析程序。现在我想使用这个用于web api的ninject依赖解析程序。但这里提出的问题是mvc IDependencyResolver命名空间是:using System.Web.Mvcweb 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依赖关系解析程序,而不必创建自己的覆盖类。很简单,对吧?

相关内容

  • 没有找到相关文章

最新更新