2017-01-17 7 views
0

私はいくつかの承認を確認するカスタムポリシーを持っています。カスタムクラスをAuthorizationHandlerに注入する際の例外

Startup.cs:私はPermissionsManagerを利用したいCheckProjectAccessLevelHandlerインサイド

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>(); 
} 

。期待どおりに動作PermissionsManagerのすべての注入がなければ

System.InvalidOperationException: Unable to resolve service for type 'myProject.Services.PermissionsManager' while attempting to activate 'myProject.Services.AuthHandlers.CheckProjectAccessLevelHandler'. 

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() 
    } 
} 

は、しかし、私はこの例外を取得します。

私は何が間違っていますか?

答えて

2

あなたが解決可能であることを(services.AddTransient<IPermissionsManager, PermissionsManager>();で)IPermissionManagerを登録して、あなたはあまりにもIPermissionsManagerにctorのパラメータを変更する必要があります。

public CheckProjectAccessLevelHandler(
    AuthHandlersContext context, 
    UserManager<ApplicationUser> userManager, 
    IPermissionsManager permissionsManager) // <-- here 
{ 
    ... 
関連する問題