我正在嘗試將依賴項注入到自定義授權處理程式的建構式中,但是AddAuthorization在 asp.net 中使它變得困難。
處理程式:
class MyHandler : AuthorizationHandler<MyRequirement>
{
readonly IDependent dependency;
public UserExistsHandler(IDependent dependency)
{
this.dependency = dependency;
}
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement)
{
context.Succeed(requirement);
}
}
程式.cs
builder.Services.AddSingleton<IAuthorizationHandler, MyHandler>();
builder.Services.AddAuthorization(config =>
{
config.AddPolicy("MyPolicy", policy =>
{
// how?
policy.AddRequirements(new )
});
});
根據官方檔案,這應該是可能的: https ://learn.microsoft.com/en-us/aspnet/core/security/authorization/dependencyinjection?view=aspnetcore-6.0
但是,for 的簽名AddRequirements不是通用的,并且需要我傳遞處理程式的實際實體,這是我不能做的,因為我沒有IServiceProvider在配置委托中參考。
https://github.com/dotnet/aspnetcore/blob/4faa84c9ddf8c9e9cc9e5b43ca15f090037c4b68/src/Security/Authorization/Core/src/AuthorizationPolicyBuilder.cs#L73
如何注冊處理程式而不必創建要注冊的新實體,這違背了我試圖做的 DI 的目的?
uj5u.com熱心網友回復:
您需要傳遞給 的不是處理程式AddRequirements,而是MyRequirement.
builder.Services.AddAuthorization(config =>
{
config.AddPolicy("MyPolicy", policy =>
{
policy.AddRequirements(new MyRequirement());
});
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/514897.html
