2017-09-05 6 views
0

.NET 표준 클래스에 ConfigurationManager이 없기 때문에 .NET 표준 클래스 라이브러리 내에서 web.config 또는 appSettings.{env}.json이든 상관없이 실행중인 어셈블리의 응용 프로그램 설정을 검색하는 가장 좋은 방법은 무엇입니까?.NET Framework, .NET Standard 및 .NET Core 프로젝트간에 동일한 구성을 사용하는 방법은 무엇입니까?

우리는 세 가지 프로젝트가 있습니다

  • ASP.NET 핵심 웹 응용 프로그램을 (1.1)
  • ASP.NET 웹 응용 프로그램 (4.6.1)
  • .NET 기본 클래스 라이브러리 (1.4) -> 두 프로젝트 모두에 의해 참조 됨

.NET Standard 클래스 lib에는 배포 된 환경에 따라 변경해야하는 URL이 있습니다.

.NET Core 앱의 경우에는이 URL을 적절한 appSettings.{env}.json 파일에 추가하고 DI 컨테이너에 적절한 값을 추가 한 다음 Microsoft.Extensions.Options 라이브러리를 사용하여 구성을 검색하면됩니다.

그러나 .NET Framework 4.6.1 응용 프로그램에서 라이브러리를 호출해야하지만 web.config 파일에서 값을 검색 할 수있는 방법이 없습니다 (적어도 찾을 수있는 방법이 없기 때문에) 클래스 라이브러리 내에 URL을 설정하는 좋은 방법이 있습니다.

URL 변수를 정적으로 설정하고 여기에서 참조하는 각 .NET Framework 프로젝트의 Application_Start() 메서드 내에서 값을 설정함으로써 우리는 추가 한 appSetting 키를 통해 어떤 환경인지 결정했습니다 각 web.config에 다음 환경을 기반으로 URL을 수동으로 설정합니다.

.NET Standard 클래스 라이브러리 내의 .NET Core 및 .NET Framework 응용 프로그램에서 appSettings 값을 가져 오는 것을보다 강력하게 처리 할 수 ​​있습니까? 바람직하게는 클래스 라이브러리 내에서만 값을 설정할 수 있습니다.

+0

완전히 합법적 인 질문에 대한 무작위 투표를 해 주셔서 감사합니다. –

답변

2

라이브러리를 호출하기 전에 구성 값을 읽은 다음 매개 변수별로 메서드 또는 생성자에 전달해야합니다.

일반적으로 라이브러리 코드는 호스트 환경 구성의 부작용에 의존해서는 안됩니다. 그렇게하면 코드를 재사용하거나 효과적으로 테스트하기가 어렵습니다.

+0

그것은 이미 우리가하고있는 방법입니다.'Global.asax.cs'에서, 그것을 사용하는 각 .NET Framework 프로젝트의 구성에 기반하여'SetClientUrl (string clientApiUrl)'메소드를 호출합니다. 좀 더 확장 가능한 방법이 있기를 바랬습니다. 우리의 라이브러리는 Swagger API를 기반으로 생성되며 배포 할 서버에 따라 다른 IP 주소가 필요합니다. 따라서 선택의 여지가 없습니다. 모든 프로젝트가 .NET Core이거나 모든 프로젝트가 .NET Framework 인 경우 완전히 가능하므로 .NET 표준에서이를 수행 할 수있는 방법이 있다고 가정했습니다. –

+1

그런데 옳은 일을하고있는 것처럼 들리지만 사용법을 강요하는 방법이 있는지 생각해 봅니다. 예를 들어, 생성자 매개 변수를 통해. 세부 사항 없이는 말하기가 어렵습니다. (내 downvote btw, 나는 이것이 좋은 질문이라고 생각하지 않았다.) –

+0

나는 그것이 당신이 아니라고 생각; 일반적으로 다운 투표를하는 사람들도 질문에 답변하는 데 시간이 필요하지 않습니다. :) 그렇다면 현재 'web.config'와'appSettings '모두에서 appSettings를 가져 오는 것이 현재 가능하지 않은 것 같습니다. json'을 .NET 표준 프로젝트에 포함 시켰습니다. 귀하의 회신에 감사드립니다. –