9

.NET アプリケーションでは、DB に保存するなど、特定の設定が必要な場合はLocalFileSettingsProvider、例のカスタム設定プロバイダーに置き換えることができます。

カスタム設定プロバイダーを作成してアプリケーション間で設定を共有する

カスタム設定プロバイダーの作成

特定のプロバイダーを使用する設定クラス ( を継承するクラス) を宣言するには、ApplicationSettingsBaseそれを装飾しSettingsProviderAttribute、プロバイダーの型をパラメーターとして渡します。[SettingsProvider(typeof(MyCustomProvider))]それ以外の場合は、既定値が使用されますLocalFileSettingsProvider

私の質問:属性を使用せずに、アプリケーション全体でカスタム プロバイダーを強制的に使用するために使用できる構成またはトリックはありますか?

その理由は、MEF 経由でプラグインをロードしていて、プラグインがサード パーティ経由で作成されている可能性があり、設定の処理方法に関心を持たせたくないからです。

4

1 に答える 1

8

次のコードを試すことができます。基本的には、Settings オブジェクトの構築中に、既定のプロバイダーを任意のプロバイダーに変更します。このコードをテストしたことがないことに注意してください。

internal sealed partial class Settings {

    public Settings() {

        SettingsProvider provider = CreateAnArbitraryProviderHere();

        // Try to re-use an existing provider, since we cannot have multiple providers
        // with same name.
        if (Providers[provider.Name] == null)
            Providers.Add(provider);
         else
            provider = Providers[provider.Name];

        // Change default provider.
        foreach (SettingsProperty property in Properties)
        {
            if (
                property.PropertyType.GetCustomAttributes(
                    typeof(SettingsProviderAttribute),
                    false
                ).Length == 0
             )
             {
                 property.Provider = provider;
             }
         }
     }
}
于 2012-12-10T18:58:34.417 に答える