2010-12-03 4 views
1

Visual Studio의 ASA (Application Settings Architecture)에서 존재하는 여러 응용 프로그램의 설정을 통합하는 통합 구성 클래스를 작성하려고합니다. (http://msdn.microsoft.com/en-us/library/8eyb2ct1.aspx)C# 유형 가용성 - 애플리케이션 설정 아키텍처 사용하기 - 강력한 형식화 구성

ASA는 각 프로젝트에 대해 Settings.Designer.cs 클래스를 생성합니다. 내가하고 싶은 것은 여러 프로젝트의 모든 설정 클래스를 모아 하나의 클래스에서 사용할 수있게하려는 것입니다. 예를 들어 공유 설정을 저장하는 데만 사용되는 프로젝트가 있으며 그게 전부입니다.

ConfigManager.Shared.ConfigKey 

는 내가 뭘하려는 것은 나에게 생성 된 설정 클래스에 대한 액세스 권한을 부여하려면이 CONFIGMANAGER 클래스를 확장입니다 :

public static class ConfigManager 
{ 
public static TopNamespace.Configuration.Properties.Settings Shared 
{ 
    get { return TopNamespace.Configuration.Properties.Settings.Default; } 
} 
} 

이처럼 나 설정에 액세스 할 수 있습니다 :이 프로젝트는 같은 클래스가 다른 프로젝트들. 이것이 가능한지 또는이 작업을 수행하는 방법을 잘 모르겠습니다.

public static class ConfigManager 
{ 
public static TopNamespace.Configuration.Properties.Settings ApplicationName 
{ 
    get { return TopNamespace.ApplicationName.Properties.Settings.Default; } 
} 
public static TopNamespace.Configuration.Properties.Settings OtherApplicationName 
{ 
    get { return TopNamespace.OtherApplicationName.Properties.Settings.Default; } 
} 
} 
:

ConfigManager.ApplicationName.ConfigKey 

ConfigManager.OtherApplicationName.ConfigKey 

순환 참조가 같은 더 많은 회원을 만들기 위해 유형에 대한 액세스 권한을 얻기 위해 구성 프로젝트에서 응용 프로그램 프로젝트에 대한 참조를 추가하는 저를 방지 : 예를 들어 나는 할 수 있도록하고 싶습니다

그런 다음 ConfigManager 클래스에 대한 액세스 권한을 얻기 위해 응용 프로그램 프로젝트에서 구성 프로젝트에 대한 참조를 다시 추가하려고합니다.

클래스를 확장하려고 생각했지만 부분 클래스는 어셈블리에서 작동하지 않으며 정적 클래스에서 상속받을 수 없습니다. 당신이 좋은 클린 ConfigManager.ApplicationName.SettingName 유형의 속성 멤버에 대한 서명을 가질 수 없었기 때문에 제네릭을 사용하는 것이 아주 좋은 해결책이 될 것 같지 않습니다.

상속을 사용하거나 응용 프로그램 도메인에서 사용 가능한 유형의 동적 검사를 수행하고 단일 ConfigManager 클래스에서 사용할 수 있도록 사용 가능한 응용 프로그램의 설정 유형을로드하는 방법이 있습니까? Visual Studio로 생성 된 여러 프로젝트의 모든 설정 클래스를 각 프로젝트 설정 인스턴스의 속성이있는 단일 관리자 클래스에서 사용할 수 있도록 만듭니다.

답변

1

이 설정을 마침내 정한 방법은 '정적'이지만 실제로 정의 된 클래스가 아니므로 .NET에서 정적 유형을 상속받지 못하게합니다. 그러나 모든 정적 멤버를 사용하여 클래스를 작성하고 보호 된 생성자를 사용하면 모든 목적과 목적에 맞게 정적으로 사용할 수 있습니다. 그럼 당신은 같은 외부 프로젝트 클래스에서 상속 할 수 있습니다

public class ConfigManager : ExternalProjectNamespace.ConfigManager 

나는 내가 CONFIGMANAGER을 사용하는 것입니다 모든 단일 프로젝트에 코드를 복제 할 필요없이 원하는 구문을 얻을 수있었습니다이 규칙을 사용하여.