Я довольно новичок в asp. net, и это мой первый вопрос о стекопереработке, поэтому, пожалуйста, go, не волнуйтесь.
У меня есть два обработчика авторизации для двух разных ресурсов. Доступ к данному ресурсу иногда зависит от доступа к другому ресурсу. Ради хорошей практики кодирования (то есть, не копируя один и тот же код в оба обработчика) и поскольку логика авторизации c будет (возможно, часто) изменяться в будущем, я хотел бы просто вызвать авторизацию для ресурса изнутри обработчик.
Наивно я просто попытался внедрить AuthorizationService в обработчик и получил исключение при запуске из-за циклической зависимости.
public class AttachmentAuthorizationHandler : AuthorizationHandler<OperationAuthorizationRequirement, Attachment>
{
private readonly UserManager<User> _userManager;
private readonly ApplicationDbContext _dbcontext;
private readonly IAuthorizationService _authorizationService;
public AttachmentAuthorizationHandler(ApplicationDbContext dbcontext,
UserManager<User> userManager,
IAuthorizationService authorizationService)
{
_dbcontext = dbcontext;
_userManager = userManager;
_authorizationService = authorizationService;
}
...
other authorization logic
...
if(_authorizationService.AuthorizeAsync(context.User, ticket, TicketOperations.Read).Result.Succeeded)
{
context.Succeed(req);
return Task.CompletedTask;
}
A circular dependency was detected for the service of type 'Microsoft.AspNetCore.Authorization.IAuthorizationService'.
Microsoft.AspNetCore.Authorization.IAuthorizationService(Microsoft.AspNetCore.Authorization.DefaultAuthorizationService) ->
Microsoft.AspNetCore.Authorization.IAuthorizationHandlerProvider(Microsoft.AspNetCore.Authorization.DefaultAuthorizationHandlerProvider) ->
System.Collections.Generic.IEnumerable<Microsoft.AspNetCore.Authorization.IAuthorizationHandler> ->
Microsoft.AspNetCore.Authorization.IAuthorizationHandler(Ticketsystem.Authorization.Attachments.AttachmentAuthorizationHandler) ->
Microsoft.AspNetCore.Authorization.IAuthorizationService
Предложения о том, как я могу обойти это?