当前位置:  开发笔记 > 后端 > 正文

将UserManager传递给ConfigureServices MVC 6中的AuthorizationHandler

如何解决《将UserManager传递给ConfigureServicesMVC6中的AuthorizationHandler》经验,为你挑选了1个好方法。

给出以下用于UserManager的DI类

public class AccountAuthorizationHandler : AuthorizationHandler
{
    private readonly UserManager userManager;
    public AccountAuthorizationHandler(UserManager userManager)
    {
        this.userManager = userManager;
    }
    protected override void Handle(AuthorizationContext context,
                                   OperationAuthorizationRequirement requirement,
                                   AuthorisedAccount resource)
    {
        // Pull the user ID claim out from the context.User
        var userId = context.User.GetUserId();
        // Get the current user's account numbers.       
        var user = userManager.Users
            .Include(u => u.AuthorisedAccounts)
            .Where(u => u.Id == userId)
            .FirstOrDefault();

        //Now check if the user's account numbers match the resource accountNumber, and 
        foreach( var authorizedAccount in user.AuthorisedAccounts)
        { 
            if ((resource.AccountNo == authorizedAccount.AccountNo) &&
                (requirement == Operations.Read))
            context.Succeed(requirement);
        }

    }
}

我想实例化它,ConfigureServices但看起来我需要提供Usermanager.即责任似乎回到了来电者身上.

services.AddInstance
    (new AccountAuthorizationHandler(I want to add UserManager here));

我想我认为AuthorizationHandler会解决Dependency本身

我该怎么做呢

谢谢



1> Maxime Rouil..:

tldr;

您正在使用错误的重载.

尝试这样的事情:

services.AddTransient();

在依赖注入中,有许多不同的概念,你使用的是等效的单例.

有关依赖注入的更多详细信息

独生子

使用ASP.NET依赖注入声明单例有两种方法.

您可以自己提供实例,services.AddInstance(...)也可以让系统为您构建实例并控制其生命周期,以便构建此单个实例.

这样做是这样的:

services.AddSingleton()

瞬态寿命

每次请求此类型的依赖项时,它将new再次启动该对象.没有两个实例是平等的,因为它们将始终被重新创建.

services.AddTransient()

作用域

那时,我们要求每个请求一个对象.它是Transient和Singleton的混合,但我们只new按每个HTTP请求访问该对象一次.

services.AddScoped()

结论

从一开始就将依赖注入内置到框架中.从安全性到模型绑定的所有东西都可以通过正确的界面和正确的生命周期来重载.

你应该花一点时间,在过快之前刷新你对依赖注入的知识.如果时间不够,请使用此帖子中提供的信息.这将是不够好,让你开始.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有