gpt4 book ai didi

c# - 如何将 appsettings.json 文件添加到我的 Azure Function 3.0 配置中?

转载 作者:行者123 更新时间:2023-12-02 00:02:45 32 4
gpt4 key购买 nike

新的 Azure Function 3.0 SDK 提供了一种实现 Startup 类的方法。它允许访问通过依赖注入(inject)提供的服务集合,我可以在其中添加我自己的组件和第三方服务。

但我不知道如何使用配置文件。

[assembly: FunctionsStartup(typeof(MyNamespace.Startup))]
namespace MyNamespace
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
...

我的第三方服务采用大型结构作为参数,并且这些配置文件是用二进制文件复制的。我可以将它们复制到 appsettings.json 文件的一个小节中:

{
"MachineLearningConfig" : {
( about 50+ parameters and subsections )
}
}

配置值根据部署环境进行更新。我使用 Azure Devops 的文件转换任务来实现此目的:生产值与暂存值和开发值不同。

鉴于文档https://learn.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection加载这些选项的方法是:

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

但这需要将所有设置添加为主机环境中的键/值字符串,而这正是我不想做的。太多了,维护起来不像json配置文件那么容易。

我将 appsettings.json 与 host.json 一起复制。

但是 Azure Function SDK 在启动时读取的 appsettings.json 文件不是我的应用程序的 appsettings.json,而是 Azure Function 工具的 appsettings.json。所以configuration.GetSection("MachineLearningConfig")返回空值,因为 Azure Function 工具 bin 文件夹中没有 appsettings.json 文件。

所以,我的问题:如何拥有我的 MachineLearningConfig部分读 self 的 appsetting.json文件注入(inject)为 IOption<MachineLearningConfig>在我的应用程序中?

最佳答案

在 Azure Functions v3 中,您可以使用 appsettings.json来自 ASP.NET-Core 的配置模式 ConfigureAppConfiguration请调用以下电话( reference )。

此外,通过使用 Configure 中的代码来更改添加选项的方式。方法如下。您不应该通过 IConfigurationIServiceProvider.Configure<>() 。这将允许您使用注入(inject)的 IOptions<MachineLearningConfig>对象。

using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.IO;

[assembly: FunctionsStartup(typeof(Startup))]

namespace MyAzureFunction
{
public class Startup : FunctionsStartup
{
public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
if (builder == null) throw new ArgumentNullException(nameof(builder));

var context = builder.GetContext();

builder.ConfigurationBuilder
.AddAppsettingsFile(context)
.AddAppsettingsFile(context, useEnvironment: true)
.AddEnvironmentVariables();
}

public override void Configure(IFunctionsHostBuilder builder)
{
if (builder == null) throw new ArgumentNullException(nameof(builder));

var configuration = builder.GetContext().Configuration;

builder.Services.Configure<MachineLearningConfig>(options =>
{
configuration.GetSection("MachineLearningConfig").bind(options);
});
}
}

public static class ConfigurationBuilderExtensions
{
public static IConfigurationBuilder AddAppsettingsFile(
this IConfigurationBuilder configurationBuilder,
FunctionsHostBuilderContext context,
bool useEnvironment = false
)
{
if (context == null) throw new ArgumentNullException(nameof(context));

var environmentSection = string.Empty;

if (useEnvironment)
{
environmentSection = $".{context.EnvironmentName}";
}

configurationBuilder.AddJsonFile(
path: Path.Combine(context.ApplicationRootPath, $"appsettings{environmentSection}.json"),
optional: true,
reloadOnChange: false);

return configurationBuilder;
}
}
}

关于c# - 如何将 appsettings.json 文件添加到我的 Azure Function 3.0 配置中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59959258/

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