Внедрение зависимостей в обработчики

Обработчики должны быть зарегистрированы в коллекции сервисов во время конфигурации (с помощью dependency injection).

Допустим, у вас есть репозиторий правил, с которым вы хотите поработать внутри обработчика авторизации и этот репозиторий был зарегистрирован в коллекции сервисов. Авторизация внедрит его в конструктор.

Например, если вы хотите использовать инфраструктуру логирования ASP.NET, то в обработчик вы внедрите ILoggerFactory. Такой обработчик будет выглядеть вот так:

public class LoggingAuthorizationHandler : AuthorizationHandler<MyRequirement>
{
    ILogger _logger;

    public LoggingAuthorizationHandler(ILoggerFactory loggerFactory)
    {
        _logger = loggerFactory.CreateLogger(this.GetType().FullName);
    }

    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement)
    {
       _logger.LogInformation("Inside my handler");
       // Check if the requirement is fulfilled.
    }
}

Далее вы регистрируете обработчик с помощью services.AddSingleton():

services.AddSingleton<IAuthorizationHandler, LoggingAuthorizationHandler>();

При запуске приложения будет создан экземпляр обработчика, и в конструктор будет внедрен ILoggerFactory.

Примечание

Обработчики, которые используют Entity Framework, нельзя регистрировать как синглтоны.

Поделись хорошей новостью с друзьями!
Следи за новостями!