我有一个获取 2 个参数的自定义属性,如何将此参数注入MyAttribute?
public class MyAttribute : Attribute
{
private readonly HttpContextAccessor _accessor;
private readonly IUserService _userService;
public MyAttribute(HttpContextAccessor accessor, IUserService userService)
{
_accessor = accessor;
_userService = userService;
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
控制器:
[MyAttribute()]
[Route("/action")]
public IActionResult Action()
{
retuen View();
}
Run Code Online (Sandbox Code Playgroud)
首先,您需要注入IHttpContextAccessor而不是HttpContextAccessor.
其次,service 不是有效的属性参数类型。我建议您可以使用ActionFilterAttributeor 任何其他可以转换为orAttribute的(这取决于您的详细场景)。ServiceFilterAttributeTypeFilterAttribute
这是一个完整的工作演示:
自定义操作过滤器属性:
public class MyAttribute : ActionFilterAttribute
{
private readonly IHttpContextAccessor _accessor;
private readonly IUserService _userService;
public MyAttribute(IHttpContextAccessor accessor, IUserService userService)
{
_accessor = accessor;
_userService = userService;
}
}
Run Code Online (Sandbox Code Playgroud)
控制器:
//[ServiceFilter(typeof(MyAttribute))]
[TypeFilter(typeof(MyAttribute))]
public async Task<IActionResult> Index()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
注册服务:
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpContextAccessor();
services.AddScoped<IUserService, UserService>();
services.AddScoped<MyAttribute>();
}
Run Code Online (Sandbox Code Playgroud)
参考:
| 归档时间: |
|
| 查看次数: |
4292 次 |
| 最近记录: |