[英]Dependency injection in custom attribute
I have a custom attribute that gets 2 parameters, how can I inject this parameters to MyAttribute
?我有一个自定义属性,它获取 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: controller:
[MyAttribute()]
[Route("/action")]
public IActionResult Action()
{
retuen View();
}
Firstly,you need inject IHttpContextAccessor
instead of HttpContextAccessor
.首先,您需要注入
IHttpContextAccessor
而不是HttpContextAccessor
。
Secondly,service is not a valid attribute parameter type.I suggest that you could use ActionFilterAttribute
or any other Attribute
(It depends on your detailed scenario) which could cast to ServiceFilterAttribute
or TypeFilterAttribute
.其次,service 不是有效的属性参数类型。我建议您可以使用
ActionFilterAttribute
或任何其他可以转换为ServiceFilterAttribute
或TypeFilterAttribute
的Attribute
(这取决于您的详细场景)。
Here is a whole working demo:这是一个完整的工作演示:
Custom ActionFilterAttribute:自定义 ActionFilterAttribute:
public class MyAttribute : ActionFilterAttribute
{
private readonly IHttpContextAccessor _accessor;
private readonly IUserService _userService;
public MyAttribute(IHttpContextAccessor accessor, IUserService userService)
{
_accessor = accessor;
_userService = userService;
}
}
Controller: Controller:
//[ServiceFilter(typeof(MyAttribute))]
[TypeFilter(typeof(MyAttribute))]
public async Task<IActionResult> Index()
{
return View();
}
Register services:注册服务:
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpContextAccessor();
services.AddScoped<IUserService, UserService>();
services.AddScoped<MyAttribute>();
}
Reference:参考:
get values from class and method attribute in middleware in asp.net core 从 class 和 asp.net 核心中间件中的方法属性获取值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.