В проекте ASP.NET Core web api я использую токены Simple Injector и JwtBearer. Я определил свой собственный класс обработчика событий токена и привязал его к механизму ASP.NET Core, как показано ниже:
private void ConfigureSecurity(IServiceCollection services)
{
var encodedKey = Encoding.UTF8.GetBytes(_config[Konstants.SecretKey]);
var key = new SymmetricSecurityKey(encodedKey);
services.AddTransient<TokenAuthenticationEvents>();
var authentication = services.AddAuthentication(o =>
{
o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
o.DefaultSignInScheme = JwtBearerDefaults.AuthenticationScheme;
o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
});
authentication.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
{
options.SaveToken = true;
options.EventsType = typeof(TokenAuthenticationEvents);
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = true,
ValidAudience = _config[Konstants.AudienceKey],
ValidateIssuer = true,
ValidIssuer = _config[Konstants.AuthorityKey],
ValidateIssuerSigningKey = true,
IssuerSigningKey = key,
RequireExpirationTime = true,
ValidateLifetime = true,
};
});
}
Вот мой класс токенов События:
public class TokenAuthenticationEvents : JwtBearerEvents
{
private readonly ILogger _log;
private readonly IUserManager _users;
public TokenAuthenticationEvents(ILogger log)
{
_log = log ?? throw new ArgumentNullException(nameof(log));
_users = null;
}
public override Task TokenValidated(TokenValidatedContext context)
{
//Some Custom Logic that requires IUserManager
return base.TokenValidated(context);
}
}
Я использую Simple Injector в качестве моего DI-контейнера
services.AddSimpleInjector(container, options =>
{
options
.AddAspNetCore()
.AddControllerActivation()
.AddViewComponentActivation()
.AddPageModelActivation()
.AddTagHelperActivation();
});
services.EnableSimpleInjectorCrossWiring(container);
services.UseSimpleInjectorAspNetRequestScoping(container);
IUserManager
вместе со всеми его зависимостями зарегистрирован в Simple Injector. если я пытаюсь передать IUserManager
в TokenAuthenticationEvents
, возникает исключение, которое ASP.NET Core не может разрешить IUserManager
. Итак, мой вопрос
Как мне указать ASP.NET Core DI получить разрешение IUserManager
из Simple Injector? .