如何在 .net core 的属性内同时依赖注入和发送值?
How can I both dependency injection and send value inside the attribute in .net core?
我想解密请求并按属性加密结果。为此,我在下面编写了 CheckFilter 属性。但是我需要进行依赖注入才能在其中使用 IHashService 服务。我还想发送一个带有属性的值,因为它在 Get 方法中使用。但是我不知道该怎么做。
public class CheckFilter : Attribute, IResourceFilter
{
private readonly IHashService _hashService;
public CheckFilter(IHashService hashService)
{
_hashService = hashService;
}
public void OnResourceExecuting(ResourceExecutingContext context)
{
//Decrypt
}
public void OnResourceExecuted(ResourceExecutedContext context)
{
//Encrypt
}
}
[HttpGet]
[CheckFilter("test")]
public string Get(string request)
{
return "hello";
}
如果您想在过滤器属性中获取服务,您可以使用服务位置通过使用 RequestServices.GetService.
来解析来自 built-in IoC 容器的组件
更多详情,您可以参考以下代码:
public class ThrottleFilterAttribute : Attribute, IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
var cache = context.HttpContext.RequestServices.GetService<IDistributedCache>();
...
}
...
}
我想解密请求并按属性加密结果。为此,我在下面编写了 CheckFilter 属性。但是我需要进行依赖注入才能在其中使用 IHashService 服务。我还想发送一个带有属性的值,因为它在 Get 方法中使用。但是我不知道该怎么做。
public class CheckFilter : Attribute, IResourceFilter
{
private readonly IHashService _hashService;
public CheckFilter(IHashService hashService)
{
_hashService = hashService;
}
public void OnResourceExecuting(ResourceExecutingContext context)
{
//Decrypt
}
public void OnResourceExecuted(ResourceExecutedContext context)
{
//Encrypt
}
}
[HttpGet]
[CheckFilter("test")]
public string Get(string request)
{
return "hello";
}
如果您想在过滤器属性中获取服务,您可以使用服务位置通过使用 RequestServices.GetService.
来解析来自 built-in IoC 容器的组件更多详情,您可以参考以下代码:
public class ThrottleFilterAttribute : Attribute, IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
var cache = context.HttpContext.RequestServices.GetService<IDistributedCache>();
...
}
...
}