![](/img/trans.png)
[英]How to add custom startup class in http trigger azure function app
[英]Unable to DI custom object in Azure Function App Startup
本地設置.json
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"tester": "e=e",
"ProjectConfiguration": "{\"tester\": \"tes22\"}"
}
}
啟動文件
class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddOptions<ProjectConfiguration>()
.Configure<IConfiguration>((option, configuration) =>
{
System.Diagnostics.Debug.WriteLine($"hello:{configuration.GetSection("ProjectConfiguration").Value}");
configuration.GetSection("ProjectConfiguration").Bind(option);
});
}
}
我能夠打印出hello:{"tester": "tes22"}
但是當我嘗試在另一個類中訪問它時,它為空。
public class InitFunction
{
private readonly ProjectConfiguration _projectConfiguration;
public InitFunction(Microsoft.Extensions.Options.IOptions<ProjectConfiguration> options)
{
_projectConfiguration = options.Value;
System.Diagnostics.Debug.WriteLine(JsonConvert.SerializeObject(options.Value));
}
option.value 打印出來的是{"tester":null}
似乎.bind
沒有正確綁定對象。 我怎樣才能做到這一點? 謝謝!
您需要將ProjectConfiguration
屬性提供為:
分隔鍵。
假設你有一個這樣的配置類:
class ProjectConfiguration {
public string Title { get; set; }
public int ANumber { get; set; }
}
它的 JSON 等效項是:
{
"IsEncrypted": false,
"Values": {
// ...
"ProjectConfiguration:Title": "My App",
"ProjectConfiguration:ANumber": 123
}
}
除了@abdusco 的回答,如果您不想要:
-delimited 鍵,您可以將ProjectConfiguration
直接綁定到local.settings.config
的"Values"
部分
{
"IsEncrypted": false,
"Values": {
// ...
"Tester": "tes22"
}
}
public class ProjectConfiguration
{
public string Tester { get; set; }
}
builder.Services
.AddOptions<ProjectConfiguration>()
.Configure<IConfiguration>((pc, config) => config.Bind(pc));
理論上Bind
方法也有一個重載來指定一個鍵,大概是在配置中使用自定義部分,但我無法讓它工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.