В .NET Core 2.x, IConfiguration
уже зарегистрирован в DI, поэтому готов для захвата.И обычно вы просто вводите IConfiguration
с помощью инжектора конструктора:
public class MyActionFilter : ActionFilterAttribute
{
private readonly IConfiguration _config;
public MyActionFilter(IConfiguration config)
{
_config = config;
}
}
Это сработает, но это также означает, что при использовании фильтра действий вам необходимо указать IConfiguration
в качестве одного из параметров:
![enter image description here](https://i.stack.imgur.com/DtdHI.png)
Было бы лучше, если бы вам не приходилось указывать зависимости вручную.
Используйте 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<>
должен дать вам то, что вы хотите получить
![enter image description here](https://i.stack.imgur.com/lZqIN.png)