2010-07-29 21 views
10

ho più assembly .NET che tutti devono condividere le impostazioni utente comuni, quali le preferenze, nomi utente, ecc Uno è un'applicazione WPF, un altro è un'applicazione console, e il terzo è un ufficio Aggiungi -in. Tutte queste impostazioni sono di tipo utente.Impostazioni di condivisione tra le applicazioni

Solo l'applicazione WPF deve essere in grado di modificare le impostazioni. Il resto li legge e basta.

Idealmente, mi piacerebbe utilizzare il framework di configurazione .NET. Non sono sicuro di come farlo comunque. Se aggiungo Impostazioni all'applicazione WPF, come possono le altre applicazioni trovare il file user.config?

È solo più semplice creare una libreria di classi e utilizzare IsolatedFileStorage e serializzare le mie impostazioni?

Qualsiasi consiglio sarebbe molto apprezzato.

risposta

0

Si consiglia di creare un servizio per fornire e aggiornare le informazioni utente e/o le preferenze. Sarà un'architettura migliore, una soluzione più pulita e sarà più facile da mantenere ed estendere.

1

è possibile implementare la classe impostazioni personalizzate, ereditando ApplicationSettingsBase. Come buon inizio, è possibile aggiungere il file delle impostazioni utente predefinito a un progetto di esempio (fare clic con il pulsante destro del mouse sul progetto ->Properties ->Settings ->This project does not contain a default settings file. Click here to create one.). Aggiungere un'impostazione utente con ambito e indagare la struttura del file Settings.Designer.cs designer-generated:

namespace ConsoleApplication1.Properties { 


    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 
    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 

     private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 

     public static Settings Default { 
      get { 
       return defaultInstance; 
      } 
     } 

     [global::System.Configuration.UserScopedSettingAttribute()] 
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 
     [global::System.Configuration.DefaultSettingValueAttribute("John Doe")] 
     public string Name { 
      get { 
       return ((string)(this["Name"])); 
      } 
      set { 
       this["Name"] = value; 
      } 
     } 
    } 
} 

Nell'implementazione personalizzata, non sarà limitato ai modificatori di accesso di design generati, in modo da poter implementa la classe Settings come interna con setter interni, visibile solo agli assembly necessari o qualsiasi altra cosa soddisfi le tue esigenze.

Naturalmente, è sempre possibile implementare il meccanismo di serializzazione/deserializzazione personalizzato, ma si perderà la funzionalità fornita dai metodi di aggiornamento, ripristino e ripristino di ApplicationSettingsBase. Se non hai bisogno di uno di questi, questo potrebbe essere l'approccio più pulito.

Problemi correlati