MurabitoB

Azure Function .Net Core 開發紀錄(二)

N 人看过

Azure Function .Net Core 開發紀錄(二) 如何取得 config 變數

前言

在 .Net Core API 專案中,我們習慣透過 appsetting.json 來取得 config 的設定值,在 Azure function 中,需要透過專案根目錄裡面的 local.setting.json 的 Values 欄位來設定。

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet"
    // 從下面開始添加自己的設定
  }
}

與 appsetting.json 不同, Values 裡面的變數不能再包成 json ,而是只能以 Key Value 的形式存在。

如果需要以物件形式存在,則必須填寫成 “<物件名稱>:<變數名稱>”:”變數值” 的形式。

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    // 自訂變數
    "UserInfo:Name": "MurabitoB"
  }
}

在程式端取得環境變數

在程式端可以透過下列的方法取得 config 的值

  1. System.Environment.GetEnvironmentVariable
  2. 透過 Dependency Inejction + IOption Pattern 來取得環境變數

在這篇文章我只打算介紹第二種方法,因為使用強型別的物件相對於前者要來的可靠的多。

DI 的設定可以參考 上篇文章


設定要綁定的 Model

public class UserInfo
{
    public string Name { get; set; }
}

在 IFunctionsHostBuilder 裡面設定 IOptionPattern

public override void Configure(IFunctionsHostBuilder builder)
{
    builder.Services.AddOptions<UserInfo>()
                    .Configure<IConfiguration>((settings, configuration)=>
                    {
                        configufration.GetSection("UserInfo").Bind(settings)
                    });
}

接著再透過 DI 取得 IOption 物件

public UserService
{
    public UserService(IOptions<UserInfo> userInfo)
    {
        var name = userInfo.Value.Name; // MurabitoB
    }
}