Поделиться через


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

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

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

Например, чтобы использовать инфраструктуру ведения журнала .NET, вставить ILoggerFactory в обработчик, как показано в следующем примере:

public class SampleAuthorizationHandler : AuthorizationHandler<SampleRequirement>
{
    private readonly ILogger _logger;

    public SampleAuthorizationHandler(ILoggerFactory loggerFactory)
        => _logger = loggerFactory.CreateLogger(GetType().FullName);

    protected override Task HandleRequirementAsync(
        AuthorizationHandlerContext context, SampleRequirement requirement)
    {
        _logger.LogInformation("Inside my handler");

        // ...

        return Task.CompletedTask;
    }
}

Предыдущий обработчик можно зарегистрировать с любым временем существования службы. Следующий код используется AddSingleton для регистрации предыдущего обработчика:

builder.Services.AddSingleton<IAuthorizationHandler, SampleAuthorizationHandler>();

Экземпляр обработчика создается при запуске приложения, и di внедряет зарегистрированный ILoggerFactory в его конструктор.

Примечание.

Не регистрируйте обработчики авторизации, использующие Entity Framework (EF) в качестве одноэлементных элементов.

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

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

Например, чтобы использовать инфраструктуру ведения журнала .NET, вставить ILoggerFactory в обработчик, как показано в следующем примере:

public class SampleAuthorizationHandler : AuthorizationHandler<SampleRequirement>
{
    private readonly ILogger _logger;

    public SampleAuthorizationHandler(ILoggerFactory loggerFactory)
        => _logger = loggerFactory.CreateLogger(GetType().FullName);

    protected override Task HandleRequirementAsync(
        AuthorizationHandlerContext context, SampleRequirement requirement)
    {
        _logger.LogInformation("Inside my handler");

        // ...

        return Task.CompletedTask;
    }
}

Предыдущий обработчик можно зарегистрировать с любым временем существования службы. Следующий код используется AddSingleton для регистрации предыдущего обработчика:

services.AddSingleton<IAuthorizationHandler, SampleAuthorizationHandler>();

Экземпляр обработчика создается при запуске приложения, и di внедряет зарегистрированный ILoggerFactory в его конструктор.

Примечание.

Не регистрируйте обработчики авторизации, использующие Entity Framework (EF) в качестве одноэлементных элементов.