自定义属性中的依赖注入

2024-03-23

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

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


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

控制器:

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

首先,你需要注入IHttpContextAccessor代替HttpContextAccessor.

其次,service 不是有效的属性参数类型。我建议您可以使用ActionFilterAttribute或任何其他Attribute(这取决于您的详细场景)可以投射到ServiceFilterAttribute or TypeFilterAttribute.

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

自定义操作过滤器属性:

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


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

控制器:

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

参考:

从asp.net core中间件中的类和方法属性获取值 https://stackoverflow.com/questions/65659571/get-values-from-class-and-method-attribute-in-middleware-in-asp-net-core

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义属性中的依赖注入 的相关文章

随机推荐