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) 的授權處理常式註冊為單一個體。