Bagikan melalui


Injeksi dependensi dalam handler persyaratan di ASP.NET Core

Handler otorisasi harus terdaftar dalam kumpulan layanan selama konfigurasi menggunakan injeksi dependensi.

Misalkan Anda memiliki repositori aturan yang ingin Anda evaluasi di dalam handler otorisasi dan repositori tersebut terdaftar dalam koleksi layanan. Otorisasi menyelesaikan dan menyuntikkan itu ke dalam konstruktor.

Misalnya, untuk menggunakan infrastruktur pengelogan .NET, masukkan ILoggerFactory ke handler, seperti yang ditunjukkan dalam contoh berikut:

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;
    }
}

Handler sebelumnya dapat didaftarkan dengan masa pakai layanan apa pun. Kode berikut menggunakan AddSingleton untuk mendaftarkan handler sebelumnya:

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

Instans handler dibuat saat aplikasi dimulai, dan DI menyuntikkan yang terdaftar ILoggerFactory ke konstruktornya.

Catatan

Jangan mendaftarkan penangan otorisasi yang menggunakan Entity Framework (EF) sebagai singleton.

Handler otorisasi harus terdaftar dalam kumpulan layanan selama konfigurasi menggunakan injeksi dependensi.

Misalkan Anda memiliki repositori aturan yang ingin Anda evaluasi di dalam handler otorisasi dan repositori tersebut terdaftar dalam koleksi layanan. Otorisasi menyelesaikan dan menyuntikkan itu ke dalam konstruktor.

Misalnya, untuk menggunakan infrastruktur pengelogan .NET, masukkan ILoggerFactory ke handler, seperti yang ditunjukkan dalam contoh berikut:

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;
    }
}

Handler sebelumnya dapat didaftarkan dengan masa pakai layanan apa pun. Kode berikut menggunakan AddSingleton untuk mendaftarkan handler sebelumnya:

services.AddSingleton<IAuthorizationHandler, SampleAuthorizationHandler>();

Instans handler dibuat saat aplikasi dimulai, dan DI menyuntikkan yang terdaftar ILoggerFactory ke konstruktornya.

Catatan

Jangan mendaftarkan penangan otorisasi yang menggunakan Entity Framework (EF) sebagai singleton.