[英]Exception on injecting custom class to AuthorizationHandler
I have a custom policy to check some authorization. 我有一个自定义策略来检查一些授权。
Startup.cs: Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IPermissionsManager, PermissionsManager>();
services.AddAuthorization(options =>
{
options.AddPolicy("HasPermission",
policy => policy.Requirements.Add(new CheckProjectAccessLevelRequirement()));
});
services.AddSingleton<IAuthorizationHandler, CheckProjectAccessLevelHandler>();
}
Inside the CheckProjectAccessLevelHandler I want to make use of the PermissionsManager. 在CheckProjectAccessLevelHandler内部,我想利用PermissionsManager。
public class CheckProjectAccessLevelHandler : AuthorizationHandler<CheckProjectAccessLevelRequirement>
{
readonly AuthHandlersContext _dbAuthContext;
private readonly UserManager<ApplicationUser> _userManager;
private readonly PermissionsManager _permissionsManager;
public CheckProjectAccessLevelHandler(AuthHandlersContext context, UserManager<ApplicationUser> userManager, PermissionsManager permissionsManager)
{
_dbAuthContext = context;
_userManager = userManager;
_permissionsManager = permissionsManager;
}
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, CheckProjectAccessLevelRequirement requirement)
{
_permissionsManager.doStuff()
}
}
But I get this exception: 但是我得到这个异常:
System.InvalidOperationException: Unable to resolve service for type 'myProject.Services.PermissionsManager' while attempting to activate 'myProject.Services.AuthHandlers.CheckProjectAccessLevelHandler'.
Without the injection of the PermissionsManager everything works as expected. 没有注入PermissionsManager,一切都会按预期进行。
What do I miss? 我想念什么?
You registered IPermissionManager
(with services.AddTransient<IPermissionsManager, PermissionsManager>();
) to be resolvable, so you should change ctor parameter to IPermissionsManager
too: 您IPermissionManager
(使用services.AddTransient<IPermissionsManager, PermissionsManager>();
)注册为可解析的,因此也应将ctor参数更改为IPermissionsManager
:
public CheckProjectAccessLevelHandler(
AuthHandlersContext context,
UserManager<ApplicationUser> userManager,
IPermissionsManager permissionsManager) // <-- here
{
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.