繁体   English   中英

.net core 3.0 构造函数参数问题

[英].net core 3.0 Constructor parameter problem

没有给出与“AuthorizeUserAttribute.AuthorizeUserAttribute(string, IUserRoleService, IModuleService, IUserService)”的所需形式参数“userRoleService”相对应的参数

授权控制器.cs

[AuthorizeUserAttribute("User.Edit")]
public ActionResult UserAuthorizationEdit()

授权用户属性.cs

public string Action { get; set; }
private IUserRoleService _userRoleService;
private IModuleService _moduleService;
private IUserService _userService;

public AuthorizeUserAttribute(IUserRoleService userRoleService, IModuleService moduleService, IUserService userService)
{

    _userRoleService = userRoleService;
    _moduleService = moduleService;
    _userService = userService;
}

当我尝试添加构造函数时,controller 方面说写构造函数作为参数。 如何将接口更改为构造函数

你需要使用

[TypeFileter(typeof(AuthorizeUser),Arguments = new object[] { "User.Edit" }))]
public ActionResult UserAuthorizationEdit(int userId, 
             RoleRegisterDto authorizationModel)

为了依赖注入可以注入你的服务。

如果您想通过 class 构造函数使用 DI 来使用接口,您需要从 controller 端的自定义属性中传递相同类型的参数。

为避免这样做,您可以将接口注册为服务,并使用以下代码获取它们而无需构造函数注入。例如:

1.界面

public interface IUserRoleService
{
    List<string> GetValues();
}

public class UserRoleService : IUserRoleService
{
    private List<string> _privateList = new List<string>();

    public List<string> GetValues()
    {
        _privateList.Add("test");
        return _privateList;
    }
}

2.启动时:

public void ConfigureServices(IServiceCollection services)
{
   services.AddSingleton<IUserRoleService, UserRoleService>();
}

3.自定义授权属性

public class AuthorizeUserAttribute:AuthorizeAttribute, IAsyncAuthorizationFilter
{
    public string Action { get; set; }

    public AuthorizeUserAttribute(string action)
    {
        Action = action;       
    }
    public async Task OnAuthorizationAsync(AuthorizationFilterContext authorizationFilterContext)
    {
        var x = authorizationFilterContext.HttpContext.RequestServices.GetRequiredService<IUserRoleService>();
        var y = x.GetValues();
    }
}

4.动作

[AuthorizeUserAttribute("User.Edit")]
public ActionResult UserAuthorizationEdit()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM