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つのマネージャクラスから利用できるようにする。