2012-09-12 49 views
7

在.NET應用程序,如果你有特殊需要的設置,如將它們存儲在數據庫,那麼你可以用你的自定義設置提供替代LocalFileSettingsProvider,例:SettingsProviderAttribute替代應用程序級的定製SettingsProvider

Create a Custom Settings Provider to Share Settings Between Applications

Creating a Custom Settings Provider

要聲明要使用特定的提供者設置類(繼承ApplicationSettingsBase的),你SettingsProviderAttribute裝飾它,並通過您的供應商類型作爲半電錶[SettingsProvider(typeof(MyCustomProvider))],否則將使用默認的LocalFileSettingsProvider

我的問題:是否有配置或技巧我可以使用它來強制我的應用程序在整個應用程序中使用我的自定義提供程序而不使用屬性?

原因是我通過MEF加載插件,插件可能是通過第三方編寫的,我不希望他們關心設置如何處理。

回答

5

你可以試試下面的代碼。它在構造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; 
      } 
     } 
    } 
} 
+0

這可以工作,但需要更新一行 - > provider = Providers [provider .Name]作爲ArbitrarySettingsProvider; –