>백엔드 개발 >C#.Net 튜토리얼 >ASP.NET Core 클래스 라이브러리 프로젝트에서 구성 파일을 읽는 방법에 대한 자세한 설명

ASP.NET Core 클래스 라이브러리 프로젝트에서 구성 파일을 읽는 방법에 대한 자세한 설명

黄舟
黄舟원래의
2017-10-14 10:01:092877검색

이 글에서는 ASP.NET Core 클래스 라이브러리 프로젝트에서 구성 파일을 읽는 방법에 대한 관련 정보를 주로 소개합니다. 친구가 제기한 질문이므로 샘플 코드를 통해 자세히 소개하는 데 도움이 될 것입니다. 귀하의 연구를 위해 또는 해당 작업에는 특정 참고 자료와 학습 가치가 있습니다. 필요한 친구는 편집자를 따라 살펴볼 수 있습니다.

머리말

최근에 한 친구가 .net 코어 클래스 라이브러리에 있는 구성 파일을 읽는 방법을 물었습니다. 당시에는 잘 언급되지도 않았습니다. 그래서 지난 이틀 동안 관련 내용을 알게 되었습니다. 일반적으로 애플리케이션 디렉터리에 appsettings.json 파일이 있고 관련 구성은 이 json 파일에 배치됩니다. 프로젝트에서 하드 코딩해야 하는 키 또는 기타 데이터와 같은 일부 구성의 경우 JSON 파일에 배치됩니다. .net 코어 이전에는 구성 파일이 web.config였으며 노드에서 데이터를 읽는 관련 클래스가 있었습니다. 이제 .net 코어의 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"));
   ......
   }

하지만 프로젝트가 클래스 라이브러리에 있는 경우 물론 애플리케이션 아래 appsettings.json에 구성 값을 넣을 수도 있지만 json 파일이 너무 부풀어오르는 것을 방지하기 위해 클래스 라이브러리에도 있습니다. 통합 관리를 위해 클래스 라이브러리에 구성 데이터를 넣어야 하므로 클래스 라이브러리에 start.cs 클래스를 만든 다음 구성을 인스턴스화할 수는 없는 다른 솔루션을 생각해야 합니다. 이런 식으로 생각하면 될 것 같은데, 아주 간단한 방법은 없나요? 이전처럼 .net 코어에서 web.config를 읽을 수는 없을까요? 키를 주고 값을 얻으려면? 즉, Strong Type 구성을 통한 구성 데이터의 통합 관리가 우리가 시도하는 방향이어야 합니다. 좋아요, 다 말했으니 시작하겠습니다. 먼저 .net 코어에서 애플리케이션 경로를 얻는 방법을 검토해 보겠습니다.

.NET Core가 애플리케이션 경로를 가져옵니다

.NET 4.X 이전에 현재 애플리케이션 루트 디렉터리 경로와 이름을 가져오는 방법은 다음과 같이 얻을 수 있습니다


var basePath = AppDomain.CurrentDomain.BaseDirectory;
var appName = AppDomain.CurrentDomain.ApplicationIdentity.FullName;

물론 애플리케이션도 얻을 수 있습니다. bin 디렉터리를 가져오는 대신 루트 디렉터리


Directory.GetCurrentDirectory()

다음과 같이 .net 코어에서 bin 디렉터리 경로를 가져오는 것이 더 간결합니다.


AppContext.BaseDirectory

.NET 4 이전(.net 코어에도 동일):


Assembly.GetEntryAssembly().GetName().Name;

클래스 라이브러리 프로젝트에서는 강력한 유형 구성을 사용하여 구성 파일 데이터를 읽습니다. 먼저 다음 확장을 다운로드해야 합니다. .


ConfigurationBuilder 클래스에 다음 Add 메서드를 추가합니다.


var name = typeof(T).GetTypeInfo().Assembly.GetName().Name;

JSON 파일 이름을 추가하는 AddJsonFile 확장 메서드의 경우 파일 경로는 SetBasePath() 메서드를 통해 구현되었으며 모든 구성은 IConfigurationBuilder 인터페이스를 기반으로 하며 다음과 같이 구현되는 JsonConfigurationSource 클래스가 있습니다.

Assembly.GetEntryAssembly().GetName().Version.ToString()

상위 클래스를 살펴보면 다음과 같이 JSON 파일 경로를 추가하는 메서드가 있습니다.

여기서 JSON 파일을 추가하는 방법을 볼 수 있습니다. 확장 메서드를 통해 구현하는 것 외에도 다음과 같이 JsonConfigurationSource를 직접 인스턴스화하여 메서드를 구현할 수도 있습니다.


//
  // 摘要:
  //  Adds a new configuration source.
  //
  // 参数:
  // source:
  //  The configuration source to add.
  //
  // 返回结果:
  //  The same Microsoft.Extensions.Configuration.IConfigurationBuilder.
  public IConfigurationBuilder Add(IConfigurationSource source);

위와 같이 JSON 파일을 추가할 수 있습니다. JSON 파일을 추가할 때 JSON 파일이 있는 디렉터리를 설정해야 합니다. 즉, 먼저 SetBasePath.메소드를 설정해야 합니다. 그렇지 않으면 다음 오류가 보고됩니다.


테스트 JSON을 만듭니다. 파일을 생성하여 현재 프로젝트(StudyEFCore.Data)에 다음과 같이 배치합니다.

마지막으로 클래스 라이브러리 프로젝트 JSON 구성 파일을 읽고 캡슐화합니다. 다음과 같습니다.


//
 // 摘要:
 //  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);
 }

에서 해결되지 않은 문제가 있습니다. 위의 내용은 현재 클래스 라이브러리 프로젝트의 경로를 얻는 방법입니다. 이 기사를 읽은 후에 좋은 방법이 생각나지 않았는지 궁금합니다. 짧은 통화는 다음과 같습니다:

IConfiguration config = new ConfigurationBuilder()
    .SetBasePath(currentClassDir)
    .AddJsonFile("appsettings.json", false, true)
    .Add(new JsonConfigurationSource { Path = "appsettings.json", Optional = false, ReloadOnChange = true })
    .Build();

결과는 다음과 같습니다:

我们将其类修改为ConfigurationManager,然后将其GetAppSettings方法定义为静态方法,最后如下调用是不是满足了在.net core之前读取web.config中配置数据的问题。哈哈哈:


var person = ConfigurationManager.GetAppSettings<Person>("JeffckySettings");

总结

위 내용은 ASP.NET Core 클래스 라이브러리 프로젝트에서 구성 파일을 읽는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.