2010-12-03 7 views
1

Visual Studioのアプリケーション設定アーキテクチャ(ASA)内に存在する複数のアプリケーションの設定を集約する統一された構成クラスを作成しようとしています。 (http://msdn.microsoft.com/en-us/library/8eyb2ct1.aspx)C#タイプの可用性 - アプリケーション設定アーキテクチャの使用 - 強力な型指定

ASAは、各プロジェクトに対してSettings.Designer.csクラスを生成します。私がしたいのは、いくつかのプロジェクトのすべての設定クラスを集めて、1つのクラスから利用できるようにすることです。たとえば、共有設定を保存するためにのみ使用されるプロジェクトがあります。それはそれです。このプロジェクトは、のようなクラスがあります。

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

これは以下のように私は設定にアクセスすることができます:

ConfigManager.Shared.ConfigKey 

私は何をしたいのですが私に生成された設定クラスへのアクセスを提供するために、このCONFIGMANAGERクラスを拡張しています他のプロジェクトのこれが可能かどうか、あるいはこれをどうやってやるのかは分かりません。

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 

循環参照は以下のように複数のメンバーを作るための型へのアクセスを取得するには、Configurationプロジェクトからアプリケーションプロジェクトへの参照を追加することから私を防ぐ:たとえば、私が行うことができるようにしたいのですが

次に、ConfigManagerクラスへのアクセス権を得るために、アプリケーションプロジェクトからConfigurationプロジェクトへの参照を追加しようとしています。

私はクラスを拡張することを考えましたが、部分クラスはアセンブリ間では動作しません。静的クラスから継承することはできません。ジェネリックスを使用することは、プロパティメンバのシグネチャのきれいなConfigManager.ApplicationName.SettingName型を持つことができないため、非常に優れた解決策ではないようです。

継承を使用する方法や、アプリケーションドメインで利用可能なタイプを動的に調べる方法はありますか?利用可能なアプリケーションの設定タイプをロードして、単一のConfigManagerクラスから利用できるようにする方法はありますか?ビジュアルスタジオで生成された複数のプロジェクトにまたがるすべての設定クラスを、各プロジェクト設定インスタンスのプロパティを持つ1つのマネージャクラスから利用できるようにする。

答えて

1

私が最終的にこれを設定する方法は静的なクラスを使用していますが、.NETでは静的型を継承させないため実際には定義されていません。しかし、すべての静的メンバーを持つクラスを作成し、保護されたコンストラクターを使用することで、すべての目的と目的を静的にすることができます。私はCONFIGMANAGERを使用されるだろう、すべて単一のプロジェクトにコードを複製することなく、私が望んでいた構文を取得することができた。この規則を使用して

public class ConfigManager : ExternalProjectNamespace.ConfigManager 

:次に、あなたのようなあなたの外部プロジェクトのクラスから継承することができます。

関連する問題