[英]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
或任何其他可以转换为ServiceFilterAttribute
或TypeFilterAttribute
的Attribute
(这取决于您的详细场景)。
这是一个完整的工作演示:
自定义 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>();
}
参考:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.