【问题标题】:How to get instance of dependency resolver in ASP.NET web API如何在 ASP.NET Web API 中获取依赖解析器的实例
【发布时间】:2014-07-08 01:10:14
【问题描述】:

如何在 web api 中获取依赖解析器实例?在asp.net mvc中我可以做DependencyResolver.Current,web api中有没有等价物?

【问题讨论】:

  • 您可能已经知道这一点,但我必须提供强制性警告:您应该允许依赖解析器将必要的依赖注入到您的类中,使用 Api 控制器作为上下文根,而不是寻找依赖解析器。
  • 是的,我需要使用解析器的原因是在自定义模型绑定器中,它将使用模型绑定器属性设置,而不是模型绑定器提供程序,因此它将使用无参数构造函数进行实例化,所以我需要使用服务位置来获取依赖关系。
  • 只是一个提示:stackoverflow.com/questions/21919753。请把它当作另一种观点——为什么要避免IDependencyResolver。 ServiceLocator 可以/应该被视为反模式blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx

标签: c# .net asp.net-web-api dependency-injection


【解决方案1】:

忽略人们所说的反模式。您不会获得完整的 DI 覆盖,尤其是对于这些年轻的技术。例如,在撰写本文时,NInject 不支持注入中间件。

要回答您的问题,可以通过HttpRequestMessage.GetDependencyScope() 获得请求的依赖关系解析器。您也可以使用HttpConfiguration.DependencyResolver,但请注意,这个范围不适用于正在执行的请求。

我建议查看特定 IOC 实施的文档。

【讨论】:

    【解决方案2】:

    在 Web API 中使用 Ninject 时,可以使用 GlobalConfiguration.Configuration。以 IUserService 为例:

    (IUserService)System.Web.Http.GlobalConfiguration.Configuration.DependencyResolver.GetService(typeof(IUserService))
    

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      • 2018-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多