共用方式為


ASP.NET 核心需求處理程序中的相依注入

授權處理程序必須在 使用 依賴注入的配置時註冊於服務集合中。

假設你有一個想要在授權處理程式中評估的規則庫,而該庫在服務集合中註冊。 授權機制會解析並注入到建構函數中。

例如,要使用 .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>();

當應用程式啟動時,會建立一個處理器實例,並使用依賴注入(DI)將已註冊的 ILoggerFactory 注入到其建構函數中。

備註

不要將使用 Entity Framework(EF)的授權處理常式註冊為單例。