ASP.NET Core 라 이브 러 리 항목 에서 설정 파일 을 읽 는 방법 에 대한 자세 한 설명

7001 단어 asp.netcore프로필
머리말
최근 에 어떤 친구 가.net core 라 이브 러 리 에서 프로필 을 읽 는 방법 을 물 었 습 니 다.그 때 는 얼떨떨 해 졌 습 니 다.이것 이 얼마나 좋 은 지 몰 랐 습 니 다.그래서 이틀 동안 관련 내용 을 알 고 나 서 야 이 글 이 나 왔 습 니 다.정상 적 으로 우 리 는 응용 프로그램 디 렉 터 리 에 app settings.json 파일 이 있 습 니 다.관련 설정 은 모두 이 json 파일 에 놓 여 있 습 니 다.그러나 만약 에 제 가 라 이브 러 리 프로젝트 를 만 들 면 키 나 다른 하 드 인 코딩 이 필요 한 데 이 터 를 JSON 파일 에 두 고.net core 이전에 설정 파일 은 웹.config 이 고 관련 클래스 가 있어 서 노드 의 데 이 터 를 읽 습 니 다.지금 은.net core 에서 json 파일 입 니 다.그러면 우 리 는 어떻게 해 야 합 니까?본문 은 이것으로 운 에 따라 생 겨 났 다.
.NET Core 라 이브 러 리 항목 JSON 프로필 읽 기
프로그램 디 렉 터 리 에 JSON 파일 을 추가 하 는 것 은 다음 과 같 습 니 다.

var builder = new ConfigurationBuilder()
    .SetBasePath(env.ContentRootPath)
    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
    .AddEnvironmentVariables();
    Configuration = builder.Build();
그리고 프로필 의 노드 를 읽 습 니 다.다음 과 같 습 니 다.

public void ConfigureServices(IServiceCollection services)
  {

   services.Configure<BlogViewModel>(Configuration.GetSection("JeffckySettings"));
   ......
   }
그러나 프로젝트 가 라 이브 러 리 에 있다 면 물론 프로그램 에 있 는 appstettings.json 에 설정 값 을 넣 을 수도 있 습 니 다.그러나 json 파일 이 비대 해 보이 지 않도록 라 이브 러 리 에 있 는 설정 데 이 터 를 라 이브 러 리 에 두 고 통일 적 으로 관리 해 야 합 니 다.따라서 라 이브 러 리 에 startup.cs 클래스 를 만 들 수 없습니다.다시 실례 화 Configuration 을 해 보 세 요.이렇게 생각해 도 될 것 같 습 니 다.저 는 시도 해 본 적 이 없습니다.간단 한 방법 이 없 나 요?.net core 이전 처럼 클래스 로 웹.config 를 읽 을 수 없습니다.우 리 는 키 만 제시 하고 값 을 얻 을 수 있 습 니까?또는 강 한 형식 설정 을 통 해 설정 데 이 터 를 통일 적 으로 관리 하 는 것 이 우리 가 시도 하 는 방향 이 어야 합 니 다.자,이렇게 많은 말 을 했 으 니 우 리 는 일 을 시작 하 자.우선.net core 에서 응용 프로그램 경 로 를 어떻게 가 져 왔 는 지 복습 합 니 다.
.NET Core 가 져 오기 프로그램 경로
.NET 4.X 이전에 현재 응용 프로그램의 루트 디 렉 터 리 경로 와 이름 을 가 져 오 면 다음 을 통 해 가 져 올 수 있 습 니 다.

var basePath = AppDomain.CurrentDomain.BaseDirectory;
var appName = AppDomain.CurrentDomain.ApplicationIdentity.FullName;
물론 빈 디 렉 터 리 대신 아래 와 같이 프로그램 루트 디 렉 터 리 를 가 져 올 수도 있 습 니 다.

Directory.GetCurrentDirectory()
.net core 에서 bin 디 렉 터 리 경 로 를 가 져 오 는 것 은 아래 와 같이 더욱 간결 합 니 다.

AppContext.BaseDirectory
.NET 4.X 전에 프로그램 집합 이름 가 져 오기

Assembly.GetEntryAssembly().GetName().Name;
.net core 에서 아래 와 같이 가 져 오기:

var name = typeof(T).GetTypeInfo().Assembly.GetName().Name;
버 전 은 아래 와 같이 가 져 옵 니 다(.net core 도 마찬가지 입 니 다).

Assembly.GetEntryAssembly().GetName().Version.ToString()
라 이브 러 리 프로젝트 에서 저 희 는 강력 한 형식 설정 을 이용 하여 파일 데 이 터 를 읽 습 니 다.먼저 다음 과 같은 확장 자 를 다운로드 해 야 합 니 다.

ConfigurationBuilder 클래스 에서 다음 추가 방법:

//
  //   :
  //  Adds a new configuration source.
  //
  //   :
  // source:
  //  The configuration source to add.
  //
  //     :
  //  The same Microsoft.Extensions.Configuration.IConfigurationBuilder.
  public IConfigurationBuilder Add(IConfigurationSource source);
AddJSonFile 확장 방법 에 대해 JSON 파일 이름 을 추가 합 니 다.파일 경 로 는 SetBasePath()방법 을 통 해 이 루어 졌 습 니 다.모든 설정 은 IConfigurationBuilder 인 터 페 이 스 를 기반 으로 합 니 다.그 중에서 JSonConfigurationSource 류 가 있 습 니 다.다음 과 같 습 니 다.

//
 //   :
 //  Represents a JSON file as an Microsoft.Extensions.Configuration.IConfigurationSource.
 public class JsonConfigurationSource : FileConfigurationSource
 {
  public JsonConfigurationSource();

  //
  //   :
  //  Builds the Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider
  //  for this source.
  //
  //   :
  // builder:
  //  The Microsoft.Extensions.Configuration.IConfigurationBuilder.
  //
  //     :
  //  A Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider
  public override IConfigurationProvider Build(IConfigurationBuilder builder);
 }
부모 클래스 를 다시 보면 JSON 파일 경 로 를 추가 하 는 방법 이 있 습 니 다.다음 과 같 습 니 다.

따라서 JSON 파일 을 추가 하 는 방법 은 확장 방법 을 통 해 이 루어 지 는 것 외 에 도 JSON ConfigurationSource 를 직접 예화 하 는 방법 이 있 음 을 알 수 있 습 니 다.다음 과 같 습 니 다.

IConfiguration config = new ConfigurationBuilder()
    .SetBasePath(currentClassDir)
    .AddJsonFile("appsettings.json", false, true)
    .Add(new JsonConfigurationSource { Path = "appsettings.json", Optional = false, ReloadOnChange = true })
    .Build();
위 에서 JSON 파일 을 추가 해도 됩 니 다.JSON 파일 을 추가 하려 면 JSON 파일 이 있 는 디 렉 터 리 를 설정 해 야 합 니 다.먼저 SetBasePath 방법 을 설정 해 야 합 니 다.그렇지 않 으 면 다음 과 같은 오 류 를 보고 할 수 있 습 니 다.

테스트 JSON 파일 을 현재 프로젝트(StudyEFCore.Data)에 다음 과 같이 놓 습 니 다.

최종 적 으로 라 이브 러 리 항목 JSON 프로필 을 읽 고 봉인 하면 다음 과 같 습 니 다.

public class JsonConfigurationHelper
 {
  public T GetAppSettings<T>(string key) where T : class, new()
  {
   var baseDir = AppContext.BaseDirectory;
   var indexSrc = baseDir.IndexOf("src");
   var subToSrc = baseDir.Substring(0, indexSrc);
   var currentClassDir = subToSrc + "src" + Path.DirectorySeparatorChar + "StutdyEFCore.Data";

   IConfiguration config = new ConfigurationBuilder()
    .SetBasePath(currentClassDir)
    .Add(new JsonConfigurationSource { Path = "appsettings.json", Optional = false, ReloadOnChange = true })
    .Build();
   var appconfig = new ServiceCollection()
    .AddOptions()
    .Configure<T>(config.GetSection(key))
    .BuildServiceProvider()
    .GetService<IOptions<T>>()
    .Value;
   return appconfig;
  }
 }
위 에서 해결 되 지 않 은 문 제 는 현재 라 이브 러 리 프로젝트 의 경 로 를 어떻게 얻 느 냐 하 는 것 입 니 다.좋 은 방법 이 생각 나 지 않 았 습 니 다.이 글 을 본 당신 은 어떤 고견 을 가지 고 있 는 지 모 르 겠 습 니 다.간단 한 호출 은 다음 과 같다.

 var config = new JsonConfigurationHelper();
   var person = config.GetAppSettings<Person>("JeffckySettings");
   var name = person.Name;
   var age = person.Age;
결 과 는 다음 과 같다.

우 리 는 이 종 류 를 ConfigurationManager 로 수정 한 다음 GetAppSettings 방법 을 정적 방법 으로 정의 합 니 다.마지막 으로 다음 호출 은.net core 전에 웹.config 에서 설정 한 데 이 터 를 읽 는 문 제 를 만족 시 키 는 것 입 니까?하하 하:

var person = ConfigurationManager.GetAppSettings<Person>("JeffckySettings");
총결산
이 절 에 서 는.net core 라 이브 러 리 프로젝트 에서 JSON 설정 의 데 이 터 를 어떻게 읽 는 지 상세 하 게 설명 하 였 으 나 아직 부족 합 니 다.당신 은 어떤 고견 을 가지 고 있 습 니까?

좋은 웹페이지 즐겨찾기