【问题标题】:Accessing Configuration Properties for the Class Decorators in ASP.NET Core在 ASP.NET Core 中访问类装饰器的配置属性
【发布时间】:2019-10-12 22:53:52
【问题描述】:

基于这个Question Here ,我正在研究将控制器绑定到某些URLs 的解决方案。这些 URL 是在 appsettings.json 中配置的。

由于解决方案是基于装饰器的,我正在寻找一种方法来为装饰器注入 IConfiguration 对象。

示例:

[PortActionConstraint(configuration.GetValue<string>("Product1:Port")]
[Route("api/[controller]")]
[ApiController]
public class Product1Controller : ControllerBase

简而言之,如何将任何接口的 IConfiguration 注入到类装饰器中?

【问题讨论】:

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


【解决方案1】:

对此最简单的解决方案是在约束实现中使用服务定位器模式来检索IConfiguration 对象。

因此,在“IsValidForRequest”方法中,通过 HTTP 上下文检索服务:

public override bool IsValidForRequest(RouteContext routeContext, ActionDescriptor action)
{
    var configuration = routeContext.HttpContext.RequestServices.GetService<IConfiguration>();

    // do something with the configuration
}

或者,您还可以实现IActionConstraintFactory,这将允许您使用构造函数注入正确解决依赖关系。不过,这将要求您自己实现IActionConstraint。所以对于这个简单的需求,使用ActionMethodSelectorAttribute 和服务定位器可能更容易。

【讨论】:

  • 谢谢戳。我在属性的构造函数中摆弄 DI,现在我可以继续你的解决方案了。
  • RE 您的编辑建议:GetService&lt;T&gt; 未被弃用。您可能需要为 Microsoft.Extensions.DependencyInjection 命名空间添加 using 以使其编译。
猜你喜欢
  • 2014-02-08
  • 1970-01-01
  • 2016-03-17
  • 1970-01-01
  • 2020-07-09
  • 1970-01-01
  • 2017-03-28
  • 2018-11-26
  • 1970-01-01
相关资源
最近更新 更多