gpt4 book ai didi

c# - 如何使用 .NET Core 在 Azure Function V3 中使用 IOptions 模式

转载 作者:行者123 更新时间:2023-12-03 13:41:29 26 4
gpt4 key购买 nike

我的要求是使用 IOptions 模式从 local.settings.json 读取值

我的 localsettings.json:

{
"IsEncrypted": false,
"Values": {
"MyOptions:MyCustomSetting": "Foobar",
"MyOptions:DatabaseName": "Confirmed",
"MyOptions:Schema": "User",
"MyOptions:Role": "Dev",
"MyOptions:UserName": "Avinash"
}
}

我的绑定(bind)类看起来像:
public class MyOptions
{
public string MyCustomSetting { get; set; }
public string DatabaseName { get; set; }
public string Schema { get; set; }
public string Role { get; set; }
public string UserName { get; set; }
}

启动.cs
[assembly: FunctionsStartup(typeof(FunctionApp2.Startup))]
namespace FunctionApp2
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddSingleton<IEmployee, Employee>();

builder.Services.AddOptions<MyOptions>()
.Configure<IConfiguration>((settings, configuration) =>
{
configuration.GetSection("MyOptions").Bind(settings);
});
}
}

我的消费类:
    public class Employee: IEmployee
{
private readonly MyOptions _settings;

public Employee(IOptions<MyOptions> options)
{
_settings = options.Value;
}
}

当且仅当我用 写我的属性前缀我的选项:在 local.settings.json 中只有它工作正常,所以我能够从 Employee 类中读取值。

但我想在 local.settings.json 中维护我的详细信息:
{
"MyOptions":{
"MyCustomSetting": "Foobar",
"DatabaseName": "Confirmed",
"Schema": "User",
"Role": "Dev",
"UserName": "Manish"
}
}

如果我像上面那样维护我的设置文件,那么我将无法读取 Employee 类中的值。

有人可以帮我解决这个问题吗?

最佳答案

那么实际上你不能也不应该。 Local.settings.json 不是您在配置中加载的经典 json 配置文件。它是一个文件,其中包含将由 azure 函数运行时作为环境变量加载的设置,以使用 Azure 应用程序设置模拟 Azure 上发生的情况。它与 ASP.NET Core Web 应用程序中的 appsetttings.json 不同。在 local.settings.json 中,设置的格式与在 Azure 门户中声明的环境变量或设置相同。
据我所知,您无法以所需的格式维护 local.settings.json 文件。当然,您可以拥有另一个 json 文件,例如“appsettings.json”,并将其加载到配置中,但如果我是您,我不会这样做,因为您将无法将所有设置放在那里(设置存在于例如,绑定(bind)不能放在那里)。
我想一旦你习惯了 : 的格式并且它会映射到像您的 json 部分这样的配置部分,可以使用这样的 local.settings.json 文件。

关于c# - 如何使用 .NET Core 在 Azure Function V3 中使用 IOptions 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62370729/

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