繁体   English   中英

自定义属性中的依赖注入

[英]Dependency injection in custom attribute

我有一个自定义属性,它获取 2 个参数,如何将此参数注入MyAttribute

public class MyAttribute : Attribute
{
    private readonly HttpContextAccessor _accessor;
    private readonly IUserService _userService;


    public MyAttribute(HttpContextAccessor accessor, IUserService userService)
    {
        _accessor = accessor; 
        _userService = userService;
        // ...
    }
}

controller:

[MyAttribute()]
[Route("/action")]
public IActionResult Action()
{
   retuen View();
}

首先,您需要注入IHttpContextAccessor而不是HttpContextAccessor

其次,service 不是有效的属性参数类型。我建议您可以使用ActionFilterAttribute或任何其他可以转换为ServiceFilterAttributeTypeFilterAttributeAttribute (这取决于您的详细场景)。

这是一个完整的工作演示:

自定义 ActionFilterAttribute:

public class MyAttribute : ActionFilterAttribute
{
    private readonly IHttpContextAccessor _accessor;
    private readonly IUserService _userService;


    public MyAttribute(IHttpContextAccessor accessor, IUserService userService)
    {
        _accessor = accessor;
        _userService = userService;
    }
}

Controller:

//[ServiceFilter(typeof(MyAttribute))]
[TypeFilter(typeof(MyAttribute))]
public async Task<IActionResult> Index()
{          
    return View();
}

注册服务:

public void ConfigureServices(IServiceCollection services)
{
    services.AddHttpContextAccessor();
    services.AddScoped<IUserService, UserService>();
    services.AddScoped<MyAttribute>();          
}

参考:

从 class 和 asp.net 核心中间件中的方法属性获取值

暂无
暂无

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

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