ASP.NET Core에서 옵션 패턴을 사용하는 방법

ASP.NET Core에서 작업 할 때 종종 애플리케이션의 설정을 지정하고 일부 파일에 저장 한 다음 애플리케이션에서 필요할 때 이러한 설정을 검색합니다. 일반적으로 Startup 클래스의 ConfigureServices 메서드에 종속성을 등록합니다. appsettings.json 또는 다른 .json 파일에서 애플리케이션의 설정을 지정한 다음 IOptions를 통해 종속성 주입을 활용하여 애플리케이션에서 이러한 설정을 읽을 수 있습니다.

옵션 패턴은 강력한 형식의 설정을 ASP.NET Core 애플리케이션에 추가하는 우아한 방법을 제공합니다. IServiceCollection 인터페이스 위에 확장 된 옵션 패턴은 클래스를 활용하여 관련 설정 그룹을 나타냅니다. 이 문서에서는 옵션 패턴, 유용한 이유 및 ASP.NET Core의 구성 데이터 작업에 사용할 수있는 방법에 대해 설명합니다.

이 문서에 제공된 코드 예제를 사용하려면 시스템에 Visual Studio 2019가 설치되어 있어야합니다. 아직 복사본이없는 경우 여기에서 Visual Studio 2019를 다운로드 할 수 있습니다.

ASP.NET Core API 프로젝트 만들기

먼저 Visual Studio에서 ASP.NET Core 프로젝트를 만들어 보겠습니다. Visual Studio 2019가 시스템에 설치되어 있다고 가정하고 아래에 설명 된 단계에 따라 Visual Studio에서 새 ASP.NET Core API 프로젝트를 만듭니다.

  1. Visual Studio IDE를 시작합니다.
  2. "새 프로젝트 만들기"를 클릭합니다.
  3. "새 프로젝트 만들기"창의 표시된 템플릿 목록에서 "ASP.NET Core 웹 애플리케이션"을 선택합니다.
  4. 다음을 클릭하십시오.
  5. 다음에 표시된 "새 프로젝트 구성"창에서 새 프로젝트의 이름과 위치를 지정합니다.
  6. 생성을 클릭합니다.
  7. “Create New ASP.NET Core Web Application”창에서 런타임으로 .NET Core를 선택하고 상단의 드롭 다운 목록에서 ASP.NET Core 3.0 (또는 그 이상)을 선택합니다. 여기서는 ASP.NET Core 3.1을 사용하겠습니다.
  8. 프로젝트 템플릿으로 "API"를 선택하여 새 ASP.NET Core API 애플리케이션을 만듭니다. 
  9. 여기서는 이러한 기능을 사용하지 않으므로 "Docker 지원 활성화"및 "HTTPS 용 구성"확인란이 선택 취소되어 있는지 확인합니다.
  10. 인증을 사용하지 않을 것이므로 인증이 "인증 없음"으로 설정되어 있는지 확인하십시오.
  11. 생성을 클릭합니다.

그러면 Visual Studio에 새 ASP.NET Core API 프로젝트가 생성됩니다. 솔루션 탐색기 창에서 컨트롤러 솔루션 폴더를 선택하고“추가-> 컨트롤러…”를 클릭하여 DefaultController라는 새 컨트롤러를 만듭니다. 이 기사의 다음 섹션에서이 프로젝트를 사용할 것입니다.

ASP.NET Core에서 옵션 패턴 구현

ASP.NET Core에서 옵션 패턴을 사용하려면 Microsoft.Extensions.Options.ConfigurationExtensions 패키지가 필요합니다. 참고로 ASP.NET Core 애플리케이션은 기본적으로 Microsoft.Extensions.Options.ConfigurationExtensions 패키지를 암시 적으로 참조합니다.

옵션 패턴을 사용할 때 일반적으로 클래스를 사용하여 관련 설정 그룹을 나타낼 수 있습니다. 구성 설정을 별도의 클래스로 분리 할 때 애플리케이션은 다음 원칙을 준수합니다.

  • 관심사 분리 : 애플리케이션의 다른 모듈에서 사용되는 설정은 서로 분리됩니다. 
  • 인터페이스 분리 원칙 : 이러한 설정을 나타내는 클래스는 사용할 구성 설정에만 의존합니다. 

이제 appsettings.json 파일에 다음 설정을 작성합니다.

"DatabaseSettings": {

    "서버": "localhost",

    "공급자": "SQL Server",

    "데이터베이스": "DemoDb",

    "포트": 23,

    "사용자 이름": "sa",

    "비밀번호": "Joydip123"

  }

구성 클래스에는 공용 get 및 set 속성이 있어야합니다. 이 설정을 곧 읽을 수 있도록 다음 클래스를 활용하겠습니다.

 공용 클래스 DatabaseSettings

    {

        공개 문자열 서버 {get; 세트; }

        공용 문자열 공급자 {get; 세트; }

        공개 문자열 데이터베이스 {get; 세트; }

        public int Port {get; 세트; }

        public string UserName {get; 세트; }

        public string Password {get; 세트; }

    }

이제 IServiceCollection의 Configure 확장 메서드를 사용하여 아래 제공된 코드 조각과 같이 설정 클래스를 구성에 바인딩 할 수 있습니다.

public void ConfigureServices (IServiceCollection 서비스)

{

   services.AddControllers ();

   services.Configure

   (옵션 => Configuration.GetSection ( "DatabaseSettings"). Bind (options));

}

ASP.NET Core의 컨트롤러에서 구성 데이터 읽기

이제 컨트롤러에서 구성 데이터를 읽는 방법을 보여주기 위해 이전에 만든 DefaultController를 활용합니다. IOptions 인터페이스는 설정 클래스의 인스턴스를 검색하는 데 사용할 수있는 Value 속성을 노출합니다.

다음 코드 스 니펫은 DefaultController라는 컨트롤러에서 DatabaseSettings 클래스를 사용하는 방법을 보여줍니다. 여기서 종속성 주입 (이 예에서는 생성자 주입)이 어떻게 사용되었는지 확인합니다.

공용 클래스 DefaultController : ControllerBase

{

   private DatabaseSettings _settings;

   public DefaultController (IOptions 설정)

   {

      _settings = settings.Value;

   }

   // 액션 메서드

}

ASP.NET Core의 구성에 대한 규칙 적용

아래 코드 스 니펫에 표시된대로 특정 규칙을 시행 할 수도 있습니다. 여기에서 SQL Server 또는 MySQL 용 도우미 클래스의 인스턴스가 싱글 톤으로 추가되는 방법에 유의하십시오.

services.Configure (옵션 =>

 {

     if (options.Provider.ToLower (). Trim (). Equals ( "sqlserver"))

     {

        services.AddSingleton (new SqlDbHelper ());

     }

     else if (options.Provider.ToLower (). Trim (). Equals ( "mysql"))

     {

         services.AddSingleton (new MySqlDbHelper ());

     }

 });

강력한 형식의 구성에 대한 지원은 우려 사항 및 인터페이스 분리 원칙의 분리를 적용 할 수있는 ASP.NET Core의 훌륭한 기능입니다. 옵션 패턴에 대한 향후 게시물에서는 IOptionsMonitor 인터페이스에 특별히 중점을두고 구성 유효성 검사 및 다시로드 가능한 구성에 대해 이야기 할 것입니다. 그때까지 여기에서 Microsoft의 온라인 설명서에서 옵션 패턴에 대해 자세히 알아볼 수 있습니다. 

ASP.NET 및 ASP.NET Core에서 더 많은 작업을 수행하는 방법 :

  • ASP.NET Core에서 메모리 내 캐싱을 사용하는 방법
  • ASP.NET Web API에서 오류를 처리하는 방법
  • Web API 컨트롤러 메서드에 여러 매개 변수를 전달하는 방법
  • ASP.NET Web API에서 요청 및 응답 메타 데이터를 기록하는 방법
  • ASP.NET에서 HttpModules를 사용하는 방법
  • ASP.NET Core Web API의 고급 버전 관리
  • ASP.NET Core에서 종속성 주입을 사용하는 방법
  • ASP.NET에서 세션으로 작업하는 방법
  • ASP.NET에서 HTTPHandler를 사용하는 방법
  • ASP.NET Core에서 IHostedService를 사용하는 방법
  • ASP.NET Core에서 WCF SOAP 서비스를 사용하는 방법
  • ASP.NET Core 애플리케이션의 성능을 개선하는 방법
  • RestSharp를 사용하여 ASP.NET Core Web API를 사용하는 방법
  • ASP.NET Core에서 로깅 작업 방법
  • ASP.NET Core에서 MediatR을 사용하는 방법
  • ASP.NET Core에서 세션 상태로 작업하는 방법
  • ASP.NET Core에서 Nancy를 사용하는 방법
  • ASP.NET Web API의 매개 변수 바인딩 이해
  • ASP.NET Core MVC에서 파일을 업로드하는 방법
  • ASP.NET Core Web API에서 전역 예외 처리를 구현하는 방법
  • ASP.NET Core에서 상태 확인을 구현하는 방법
  • ASP.NET 캐싱의 모범 사례
  • .NET에서 Apache Kafka 메시징을 사용하는 방법
  • 웹 API에서 CORS를 활성화하는 방법
  • WebClient 대 HttpClient 대 HttpWebRequest를 사용하는 경우
  • .NET에서 Redis Cache로 작업하는 방법
  • .NET에서 Task.WaitAll 대 Task.WhenAll을 사용하는 경우