2013-04-21 2 views
3

Windows Store 및 WP8 응용 프로그램에서 사용할 PCL을 개발 중입니다. 이 라이브러리에는 몇 가지 구성이 필요합니다. 원격 서비스 URL. app.config에 이들을 넣고 ConfigurationManager를 사용하여 검색하려고했지만 System.Configuration은 PCL에서 사용할 수없는 것 같습니다.휴대용 클래스 라이브러리의 구성 값

+1

'ConfigurationManager'에 액세스하는 일반 라이브러리는 저에게 다소 의심 스럽습니다. 그 응용 프로그램이 구성 객체를 라이브러리에 전달해야합니까? – CodesInChaos

답변

2

구성 클래스를 만들었습니다.

public class MyLibraryConfig 
{ 
    public string RemoteServiceUrl{get;set;} 
} 

는이어서 표준 의존성 주입 기술을 통해 라이브러리이 클래스의 인스턴스를 전달 가장 간단한 경우 1 그것은 같을 수있다. 예를 들어 생성자에 전달하고 필드에 저장합니다. 그렇다면 ConfigurationManager 등의 파일에서 구성을 읽는 것은 응용 프로그램의 책임입니다.

IMO 이것은 훨씬 더 좋은 디자인이며 ConfigurationManager에 액세스 할 수있는 라이브러리에서도 구성 관리자를 쿼리하는 데 사용합니다. 그렇지 않으면 응용 프로그램이 단일 구성을 사용하고 특정 구성 메커니즘을 사용하도록합니다.


1 당신은 또한 인터페이스 또는 불변의 클래스를 사용할 수 있습니다. 약간 더 복잡하지만 IMO 디자인이 더 좋습니다.

+0

라이브러리 클래스의 앱 설정을 사용하는 것이 왜 그렇게 나쁜지 정당화 할 수 있습니까? 이 구성 메커니즘이 이런 식으로 사용되도록 설계되지 않았습니까? – filip

+0

어떤 구성을 사용할지 결정하는 것은 응용 프로그램 책임이며 라이브러리의 책임은 아닙니다. 응용 프로그램의 시작 코드에서'ConfigurationManager'에 접근하는 것은 괜찮지 만 라이브러리에서 액세스하는 것은 아닙니다. 라이브러리에서'ConfigurationManager'에 접근하는 것을 피하는 것은 싱글 톤과 전역 변수를 피하는 특별한 경우입니다. 단일 프로세스 내에서 라이브러리의 인스턴스화 두 개를 원한다면 어떻게할까요? 어떻게 테스트 구성을 제공합니까? 라이브러리 소비자가 다른 구성 메커니즘을 사용하면 어떻게 될까요? – CodesInChaos

+0

AppSettings는 해당 이름에서 알 수 있듯이 응용 프로그램 별 설정 모음입니다. 라이브러리는 여러 응용 프로그램에서 재사용 할 수있는 코드를 나타내며 이러한 응용 프로그램은 설정을 그룹화하는 여러 가지 방법을 가질 수 있습니다. 물론 휴대용 클래스 라이브러리로 작업하는 경우 AppSettings를 사용하는 것보다 구성 정보에 액세스하는 더 일반적인 방법을 찾아야합니다. –

관련 문제