Доступ к свойствам конфигурации для декораторов классов в ASP.NET Core - PullRequest
0 голосов
/ 27 мая 2019

Исходя из этого Вопрос Здесь , я работаю над решением для привязки контроллеров к определенным URL-адресам .Эти URL-адреса настроены в appsettings.json.

Поскольку решение основано на декораторах, я ищу способ внедрения объекта IConfiguration для декораторов.

Пример:

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

Короче говоря, как я могу ввести IConfiguration любого интерфейса в Class Decorator?

1 Ответ

3 голосов
/ 27 мая 2019

Самым простым решением для этого является использование шаблона локатора службы внутри реализации ограничения для извлечения объекта 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 с указателем службы, вероятно, проще.

...