首页 > 解决方案 > 从 IServiceCollection 获取服务到属性类的正确方法

问题描述

我正在尝试在我的应用程序中实现角色/权限系统,但我不知道如何在 m AuthorizeAttributeClass 中使用 DbContext。

这是我正在使用的代码:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc.Filters;
using HygeneApi.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;

namespace HygeneApi.Authorization

{


[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class PrivilegeAuthorizeAttribute : AuthorizeAttribute, IAuthorizationFilter
{
    private readonly string _privilege;
    private readonly ConcreetDataContext _context;


    public PrivilegeAuthorizeAttribute(string privilege)
    {
        _privilege = privilege;
    }

    public async void OnAuthorization(AuthorizationFilterContext context)
    {
        var user = context.HttpContext.User;
        IServiceCollection serviceCollection = new ServiceCollection();

        using (var contexte = new ConcreetDataContext(serviceCollection.GetService<DbContextOptions<ConcreetDataContext>>()))
        {
            var currentUser = await _context.Users.AsQueryable().FirstOrDefaultAsync(u => u.Email == user.Identity.Name);
            Console.WriteLine(currentUser.FirstName);
        }

    }
}

我收到错误消息:“IServiceCollection 不包含 GetService 的定义......”

而且我也不能使用 Microsoft.Extensions.DependencyInjection.Abstractions :

我已经安装了包和所有东西,但我总是有类型或命名空间名称 Abstractions 在 Microsoft.Extensions.DependencyInjection 中不存在。

预先感谢您的帮助 !

标签: asp.netdependency-injectionasp.net-authorization

解决方案


推荐阅读