У меня есть пользовательская реализация AuthenticationHandler<>
, которая зависит от службы приложений.Есть ли способ разрешить зависимости AuthenticationHandler
от простого инжектора?Или может быть межрегиональная регистрация, чтобы службы приложений могли быть разрешены из IServiceCollection
?
Пример реализации для простоты может выглядеть следующим образом:
public class AuthHandler : AuthenticationHandler<AuthenticationSchemeOptions>
{
private readonly ITokenDecryptor tokenDecryptor;
public SecurityTokenAuthHandler(ITokenDecryptor tokenDecryptor,
IOptionsMonitor<AuthenticationSchemeOptions> options,
ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) :
base(options, logger, encoder, clock) =>
this.tokenDecryptor = tokenDecryptor;
protected override async Task<AuthenticateResult> HandleAuthenticateAsync() =>
return tokenDecryptor.Decrypt(this);
}
...
services.AddAuthentication("Scheme")
.AddScheme<AuthenticationSchemeOptions, AuthHandler>("Scheme", options => { });
Текущее решение состоит в том, чтобы вручную подключатьсяне очень удобный сервис приложений:
services.AddTransient(provider => container.GetInstance<ITokenDecryptor>());