gpt4 book ai didi

c# - 将 IConfiguration 注入(inject) ActionFilter

转载 作者:行者123 更新时间:2023-12-02 08:24:04 27 4
gpt4 key购买 nike

我们可以像这样将 IConfiguration 注入(inject)到类中:

//Controller
AppSettings obj = new AppSettings(_configuration);

//Class
public class AppSettings
{
private IConfiguration _configuration;

public AppSettings(IConfiguration configuration)
{
_configuration = configuration;
}

...
}

现在我尝试将 IConfiguration 注入(inject)到我的 ActionFilter 中。执行此操作的最佳方法是什么?

最佳答案

在 .NET Core 2.x 中,IConfiguration已经注册到 DI,因此可以抓取。通常你只需注入(inject) IConfiguration通过构造函数注入(inject):

public class MyActionFilter : ActionFilterAttribute
{
private readonly IConfiguration _config;

public MyActionFilter(IConfiguration config)
{
_config = config;
}
}

这可行,但这也意味着当您使用操作过滤器时,您需要提供 IConfiguration作为参数之一:

enter image description here

如果您不必手动提供依赖项,那就更好了。


使用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

关于c# - 将 IConfiguration 注入(inject) ActionFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58011870/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com