2

강력한 형식의 클래스를 사용하여 appsettings.json 파일 (및 기타 구성 파일)에 액세스하고 싶습니다. .NET Core 1 (예 : https://weblog.west-wind.com/posts/2016/may/23/strongly-typed-configuration-settings-in-aspnet-core)에서는 .NET Core 2와 관련하여 많은 정보가 있지만 그 중 .NET Core 2에 대해서는 아무 것도 없습니다..NET Core 2 Console 응용 프로그램에서 강력한 형식의 구성 설정

또한, ASP가 아닌 콘솔 앱을 만들고 있습니다. .그물.

구성 API가 .NET Core 2에서 완전히 변경된 것 같습니다. 해결할 수 없습니다. 누군가?

편집 : 아마 코어 2 문서가 아직 따라 잡지 않은 것 같습니다. 예 : https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.configuration.configurationbinder?view=aspnetcore-2.0은 .NET Framework 2에는 ConfigurationBinder가 있지만 Microsoft.Extensions.Configuration 및 Microsoft.Extensions.Options의 개체 브라우저 검색은 아무 것도 밝히지 않는다고 생각할 수 있습니다.

나는

  • 설치 - 패키지 Microsoft.Extensions.Options -Version 2.0.0
  • 설치 패키지 Microsoft.Extensions.Configuration -Version 2.0.0
에 NuGet 콘솔을 사용했다
+1

ConfigurationBinder' '가'Microsoft.Extensions.Configuration.Binder' NuGet 패키지이다 .. –

답변

3

그 결과를 이끌어 낸 Martin Ullrich에게 감사드립니다. 여기 놀이에 몇 가지가 있었다 :

  • 이전 스타일 '참조'(.NET 코어의 새로운 '의존성'에 반대되는) 모든
  • 을 숨겨 때문에 내가 DLL 수준 참조 녹슨 해요 NuGet Microsoft.Extensions.Configuration 패키지를 설치하면 하위 네임 스페이스 DLL이 설치된다고 가정합니다. 사실 NuGet 갤러리에는 많은 패키지가 있습니다 (here 참조). NuGet 콘솔은 사용자가 어떤 DLL을 가져 왔는지는 알려주지 않지만 설치되면 솔루션 브라우저에서 볼 수 있습니다. enter image description here
    API Browser에서 ConfigurationBinder를 검색하면 아무런 결과도 얻지 못합니다. 확장 라이브러리의 일부이기 때문입니다.
  • Rick Strahl은 질문에 링크 된 자신의 게시물에서 언급했지만, 아직 Bind 메서드는 놓쳤습니다. 예를 들어 Bind 메서드는 ConfigurationBinder의 정적 메서드와 매우 비슷합니다. 그러나 실제로는 확장 방법입니다. 따라서 NuGet 패키지가 설치되면 마술처럼 나타납니다. 이것은 우리가 문서에 크게 의존하게하는데, 아직 잘 풀지 못했습니다.

그래서, 요약, 솔루션 하였다 :

  • 설치 패키지 Microsoft.Extensions.Configuration.Binder -Version 2.0.0
  • 설치 패키지 Microsoft.Extensions.Configuration.Json -Version 2.0.0

.SetBasePath.AddJsonFile 메소드 .Bind 방법을 부여 제, 및 초.

최종 코드를 여기에 추가하면 하루 만에 완성됩니다.

EDIT :

public class TargetPhoneSetting { 
    public string Name { get; set; } = ""; 
    public string PhoneNumber { get; set; } = ""; 
} 

public class AppSettings { 
    public List<TargetPhoneSetting> TargetPhones { get; set; } = new List<TargetPhoneSetting>(); 
    public string SourcePhoneNum { get; set; } = ""; 
} 

public static AppSettings GetConfig() { 
    string environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); 

    var builder = new ConfigurationBuilder() 
     .SetBasePath(System.IO.Directory.GetCurrentDirectory()) 
     .AddYamlFile("appsettings.yml", optional: false) 
     ; 
    IConfigurationRoot configuration = builder.Build(); 

    var settings = new AppSettings(); 
    configuration.Bind(settings); 

    return settings; 
}