将ninject dependecyResolver用于MVC和WebAPI

时间:2014-01-16 09:46:23

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

我创建了MVC 4 Web应用程序并决定在此应用程序中使用web api。 我正在为MVC Web应用程序使用ninject依赖解析器。现在我想对web api使用这个ninject依赖解析器。 但是这里提出的问题mvc IDependencyResolver命名空间是:using System.Web.Mvc 和web api IDependencyResolver是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;

2 个答案:

答案 0 :(得分:14)

有一种方法可以在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());
       }
   }

查看此文章寻求解决方案: Simple Way to share Dependency Resolvers between MVC and Web API

答案 1 :(得分:3)

有一个NuGet包可以做到这一点。将NInject,NInject.Web.Common,NInject.MVCx和WebApiContrib.IoC.Ninject NuGet包添加到项目中。应该已在App_Start文件夹中创建NInjectWebCommon类。将依赖项的绑定添加到RegisterServices方法。在RegisterServices(内核)调用之后的CreateKernel方法中,添加以下行:

GlobalConfiguration.Configuration.DependencyResolver = new NinjectResolver(kernel);

这将允许您创建Ninject依赖项解析程序,而无需创建自己的覆盖类。容易,对吧?