10

我已经创建了 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;
4

2 回答 2

15

有一种方法可以在 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 之间共享依赖解析器的简单方法

于 2014-07-10T11:42:12.577 回答
4

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

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

这将使您无需创建自己的覆盖类即可创建 Ninject 依赖解析器。容易,对吧?

于 2016-11-23T19:16:08.363 回答