gpt4 book ai didi

c# - 如何将应用程序服务注入(inject) AuthenticationHandler

转载 作者:行者123 更新时间:2023-12-03 21:54:53 26 4
gpt4 key购买 nike

我有一个自定义 AuthenticationHandler<>依赖于应用服务的实现。有没有办法解决 AuthenticationHandler 的依赖关系?从简单的注入(inject)器?或者可能是跨线注册,以便可以从 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>());

最佳答案

我正在使用 .Net 5 Steven提供的原件从旧的 .net 核心应用程序升级后,我不再为我工作。我不得不:

public void ConfigureServices(IServiceCollection services)
{
// ...

services.AddAuthentication("MyScheme")
.AddScheme<ApiKeyOptions, ApiKeyAuthenticationHandler>("MyScheme", o => { });

var authHandlerDescriptor = services
.First(s => s.ImplementationType == typeof(ApiKeyAuthenticationHandler));

services.Remove(authHandlerDescriptor);

services.AddTransient(c => container.GetInstance<ApiKeyAuthenticationHandler>());
}

关于c# - 如何将应用程序服务注入(inject) AuthenticationHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53922411/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com