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) をシングルトンとして使用する認可ハンドラーは登録しないでください。
ASP.NET Core