将 IConfiguration 注入 ActionFilter
Inject IConfiguration into ActionFilter
我们可以像这样将 IConfiguration 注入 class:
//Controller
AppSettings obj = new AppSettings(_configuration);
//Class
public class AppSettings
{
private IConfiguration _configuration;
public AppSettings(IConfiguration configuration)
{
_configuration = configuration;
}
...
}
现在我正在尝试将 IConfiguration 注入我的 ActionFilter。执行此操作的最佳方法是什么?
在 .NET Core 2.x 中,IConfiguration
已经注册到 DI,因此可以获取了。通常你会通过构造函数注入注入 IConfiguration
:
public class MyActionFilter : ActionFilterAttribute
{
private readonly IConfiguration _config;
public MyActionFilter(IConfiguration config)
{
_config = config;
}
}
这可行,但这也意味着当您使用动作过滤器时,您需要提供 IConfiguration
作为参数之一:
如果您不必手动提供依赖项就更好了。
改用GetService<>
绕过它的一种方法是在其中一个覆盖上获取所需的服务:
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
public class MyActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
var config = context.HttpContext.RequestServices.GetService<IConfiguration>();
string recaptchaVersion = config.GetValue<string>("recaptcha:version");
base.OnActionExecuting(context);
}
}
如果你的 appsettings.json
有这样的东西:
{
"recaptcha": {
"secretKey": "xxx",
"siteKey": "xxx",
"version": "v3"
}
}
然后 config.GetValue<>
应该给你你想要访问的内容
我们可以像这样将 IConfiguration 注入 class:
//Controller
AppSettings obj = new AppSettings(_configuration);
//Class
public class AppSettings
{
private IConfiguration _configuration;
public AppSettings(IConfiguration configuration)
{
_configuration = configuration;
}
...
}
现在我正在尝试将 IConfiguration 注入我的 ActionFilter。执行此操作的最佳方法是什么?
在 .NET Core 2.x 中,IConfiguration
已经注册到 DI,因此可以获取了。通常你会通过构造函数注入注入 IConfiguration
:
public class MyActionFilter : ActionFilterAttribute
{
private readonly IConfiguration _config;
public MyActionFilter(IConfiguration config)
{
_config = config;
}
}
这可行,但这也意味着当您使用动作过滤器时,您需要提供 IConfiguration
作为参数之一:
如果您不必手动提供依赖项就更好了。
改用GetService<>
绕过它的一种方法是在其中一个覆盖上获取所需的服务:
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
public class MyActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
var config = context.HttpContext.RequestServices.GetService<IConfiguration>();
string recaptchaVersion = config.GetValue<string>("recaptcha:version");
base.OnActionExecuting(context);
}
}
如果你的 appsettings.json
有这样的东西:
{
"recaptcha": {
"secretKey": "xxx",
"siteKey": "xxx",
"version": "v3"
}
}
然后 config.GetValue<>
应该给你你想要访问的内容