次の方法で共有


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>();

ハンドラーのインスタンスはアプリの起動時に作成され、登録された ILoggerFactory は DI によってコンストラクターに挿入されます。

注意

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>();

ハンドラーのインスタンスはアプリの起動時に作成され、登録された ILoggerFactory は DI によってコンストラクターに挿入されます。

注意

Entity Framework (EF) をシングルトンとして使用する認可ハンドラーは登録しないでください。