Asp.net mvc 4 对MVC和WebAPI使用ninject dependecyResolver

Asp.net mvc 4 对MVC和WebAPI使用ninject dependecyResolver,asp.net-mvc-4,asp.net-web-api,ninject,dependency-resolver,Asp.net Mvc 4,Asp.net Web Api,Ninject,Dependency Resolver,我已经创建了一个MVC4 web应用程序,并决定在这个应用程序中使用web api。 我正在为MVC web应用程序使用ninject依赖项解析器。现在我想使用这个用于web api的ninject依赖项解析器。 但是这里出现的问题是:使用System.Web.mvc web api IDependencyResolver使用System.web.Http.Dependencies 那么我该如何解决这个问题呢 最后,我想要这样的东西: // Use the container and the N

我已经创建了一个MVC4 web应用程序,并决定在这个应用程序中使用web api。 我正在为MVC web应用程序使用ninject依赖项解析器。现在我想使用这个用于web api的ninject依赖项解析器。 但是这里出现的问题是:使用System.Web.mvc

web api IDependencyResolver使用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());
       }
   }
查看本文以了解解决方案:

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

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

这将允许您创建Ninject依赖项解析器,而无需创建自己的覆盖类。很简单,对吗?

Web API依赖项解析程序与MVC依赖项解析程序是完全不同的接口。您必须为Web API创建另一个类。我认为应该有一种方法,一种模式。像适配器之类的东西。因为他们的界面中有一些常用的方法!解决方案很简单,创建一个实现
System.Web.Mvc.IDependencyResolver
System.Web.Http.IDependencyResolver
接口的类。相关/重复:我相信它是NinjectDependencyResolver(内核),而不是NinjectResolver,这篇博文对您的方法进行了扩展。