使用 IOptions 将应用程序设置注入 Azure Functions v3.0<>



如何使用IOptions将应用程序设置注入Azure Functions v3.0>

始终获取JwtIssuerOptions空值

假设我们的设置文件local.settings.json包含以下数据:

{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"SqlConnectionString": "Server"
},
"JwtIssuerOptions": {
"JwtKey": "rpqru",
"JwtIssuer": "mydomain",
"JwtExpireDays": 7,
"JwtExpireMinutes": 240,
"JwtAuidence": "localhost"
}
}

功能启动

公共类Startup:FunctionsStartup{

public override void Configure(IFunctionsHostBuilder builder)
{
var localConfig = new ConfigurationBuilder()
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();           
builder.Services.AddOptions<JwtIssuerOptions>().Configure<IConfiguration>((settings, configuration) =>
{
configuration.Bind("JwtIssuerOptions", settings);
});
}

JwtIssuerOptions类类似于以下

public class JwtIssuerOptions
{

public string JwtKey { get; set; }
public string JwtIssuer { get; set; }
public int JwtExpireDays { get; set; }
public int JwtExpireMinutes { get; set; }
public string JwtAuidence { get; set; }
}

类似波纹管的功能

public class MyFunctions

{
private readonly IOptions<JwtIssuerOptions> _options;
public MyFunctions(IOptions<ApplicationSettings> applicationSettingsOptions, 
IOptions<JwtIssuerOptions>  options)
{
// the named section of the configuration file "JwtIssuerOptions"
_options;= options;
}
}

使用构建的本地配置中的部分配置所需的选项

功能启动

public override void Configure(IFunctionsHostBuilder builder) {
IConfiguration localConfig = new ConfigurationBuilder()
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();

builder.Services
.Configure<JwtIssuerOptions>(localConfig.GetSection("JwtIssuerOptions"));
}

另一种方法是获取本地设置,将其添加到容器中

FunctionsStartup {
public override void Configure(IFunctionsHostBuilder builder) {
IConfiguration localConfig = new ConfigurationBuilder()
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
//load setting
JwtIssuerOptions jwt = localConfig.GetSection("JwtIssuerOptions").Get<JwtIssuerOptions>();
//register with container
builder.Services.AddSingleton<JwtIssuerOptions>(jwt);
}
}

并显式地将其注入函数

public class MyFunctions {
private readonly JwtIssuerOptions jwtOptions;
public MyFunctions(IOptions<ApplicationSettings> applicationSettingsOptions, 
JwtIssuerOptions jwtOptions) {
this.jwtOptions = jwtOptions;
//...
}

//...
}

首先,用您在EnvironmentVariables中使用的所有属性名称创建一个文件名ApplicationSettings.cs,好吗?

public class ApplicationSettings
{
public string DatabaseConnectionString { get; set; }
public string valueXYZ { get; set; }
public string CacheConnectionString { get; set; }
} 

之后,最好的方法是使用启动文件将此配置加载到内存中(如果您的项目不存在,请创建(

[ExcludeFromCodeCoverage]
public class Startup : FunctionsStartup
{
private IConfiguration _configuration = null;
public override void Configure(IFunctionsHostBuilder builder)
{
var serviceProvider = builder.Services.BuildServiceProvider();
_configuration = serviceProvider.GetRequiredService<IConfiguration>();
SetupMaps
.ConfigureMaps();
builder
.Services
.AddLogging();
builder
.Services
.AddOptions<ApplicationSettings>() <-- YOUR CLASS
.Configure<IConfiguration>(
(settings, configuration) => { configuration.Bind(settings); });
}

===现在在某些类别中使用

namespace YOUR_NAMESPACE
{
public class YOUR_CLASS: YOUR_INTERFACE
{
private readonly ApplicationSettings _applicationSettings;
public YOUR_CLASS(
IOptions<ApplicationSettings> applicationSettings)
{
_applicationSettings = applicationSettings.Value;
}
public async Task<RETURN_CLASS> METHOD_NAME(string PARAMETER)
{
//HERE YOU CAN USE _applicationSettings.PROP
}

相关内容

最新更新