Azure Functions에서 구성 값 삽입

8331 단어 clouddotnetazure
Azure 기능 프레임워크에 대한 가장 중요한 업데이트 중 하나는 DI 지원의 추가였습니다. DI 사용 사례 중 하나는 구성 값/환경 변수의 형태로 "기능 플래그"를 읽고 사용하는 것입니다.

따라서 큰 질문에 대해 여기에서 어떻게 이동합니까(local.appsettings.json/env 변수):

  {
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet",
        "FeatureFlag" : "True",
        "ConfigValue" : "some random value"
    }
}

여기로(함수/트리거에 삽입된 생성자):

 public class FeatureHttpTrigger
    {
        private readonly FeatureConfig _config;

        public FeatureHttpTrigger(FeatureConfig config)
        {
            _config = config;
        }

        [FunctionName("FeatureHttpTrigger")]
        public async Task<IActionResult> RunAsync(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]
            HttpRequest req, ILogger log)
        {
          ......
        }
}

  • 기능플래그와 환경변수가 상당한 차이가 있는 것으로 알고 있지만, 많은 분들이 이렇게 사용하고 있습니다. 어쨌든 ... 계속 ...
  • 그래서, 당신이 하는 경향이 있는 가장 일반적인 일 중 하나는 DI 프레임워크에 의존하여 사용 방식을 단순화하기 위해 모든 종류의 유용한 구성(미리 공들게 설정한)을 제공하는 것입니다. Dependency Injection이 익숙하지 않다면 웹 개발을 둘러싼 대부분의 프레임워크에서 오늘날 사용되는 가장 중요한 패턴 중 하나이기 때문에 살펴보는 것이 좋습니다.

  • 준비



    이 작업을 수행하려면 v3 of azure 함수를 사용하고 있는지 확인해야 합니다(v2에서도 작동해야 함).
    다음으로 DI 설정이 있는지 확인해야 합니다. 여기에 도움이 되는 좋은 자료resource가 있습니다.

    실제 단계



    계속하기 전에 저는 기능 폴더의 열렬한 팬이며 이 예제를 빌드할 때 무의식적으로 사용했음을 덧붙이고 싶습니다. 필요하지 않으며 어떤 다른 구성은 무시할 수 있지만 이것은 내가 일반적으로 내 기능 코드를 구조화하는 방식입니다.

    자, 이제 모든 것이 끝났습니다. 이제 본론으로 돌아가 보겠습니다.

    가장 먼저 해야 할 일은 생성자 주입을 통해 사용하려는 모양으로 데이터를 보유할 클래스를 추가하는 것입니다.

        public class FeatureConfig
        {
            public string ConfigValue { get; set; }
            public bool FeatureFlag { get; set; }
        }
    

    다음으로, appsettings 또는 환경 변수 또는 함수 앱 구성(이상적으로는 모든 곳에서 :))에 값이 설정되어 있는지 확인해야 합니다.

    이제 내가 일반적으로 수행하는 다음 작업은 필수 사항은 아니지만 모든 DI 구성을 보유할 정적 클래스를 생성하기 위해 코드를 보다 구조화된 si로 유지한다고 생각합니다.

    internal static class ServiceRegistrations
        {
            public static void ConfigureServices(IServiceCollection builderServices, IConfiguration configuration)
            {
                builderServices.AddFeature();
            }
    
            private static IServiceCollection AddFeature(this IServiceCollection serviceCollection)
            {
                // here we would group all feature related DI code
                serviceCollection.TryAddSingleton<FeatureConfig>(sp =>
                {
                    var config = sp.GetService<IConfiguration>();
    
                    return new FeatureConfig
                    {
                        ConfigValue = config.GetValue<string>("ConfigValue"),
                        FeatureFlag = config.GetValue<bool>("FeatureFlag" )
                    };
                });
    
                return serviceCollection;
            }
        }
    

    그리고 붐, 그게 다야 ...

    자세히 보고 싶으시면 여기 링크github

    좋은 웹페이지 즐겨찾기