【问题标题】:Using ninject dependecyResolver for both MVC and WebAPI对 MVC 和 WebAPI 使用 ninjectdependecyResolver
【发布时间】:2014-01-16 09:46:22
【问题描述】:

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

【问题讨论】:

  • Web API 依赖解析器是一个与 MVC 的依赖解析器完全不同的接口。您必须为 Web API 创建另一个类。
  • 我觉得应该有办法,pattrn。诸如适配器之类的东西。因为他们的界面中有一些通用的方法!
  • 解决方法很简单,创建一个实现System.Web.Mvc.IDependencyResolverSystem.Web.Http.IDependencyResolver接口的类。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    有一个 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 依赖解析器。简单吧?

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多