2010-02-22 14 views
7

Recentemente ho scovato una parte della mia app Winform in un file .dll. Alcune delle classi di questa dll vogliono recuperare/memorizzare le impostazioni dell'utente. Le classi l'utilizzo dell'apparecchio VS generato file di impostazioni in modo che appena fatto Properties.Settings.Default.SomeSetting = var;Properties.Settings.Default.Save() eccCome accedere alla configurazione dell'app da un dll?

Quali sono le opzioni, ora che mi sono trasferita che il codice ad una libreria di classi/dll?

+0

Stai cercando un metodo per accedere alle impostazioni precedenti o hai l'impressione che le librerie di classi non possano avere file app.config? –

+0

Non so cosa sto cercando, ecco perché lo chiedo. Non riesco però a far accedere le mie DLL alla sua app.config separata, né i file di installazione di clickonce in Visual Studio includono un file di impostazioni di .dll. – leeeroy

risposta

3

L'applicazione di hosting deve gestire l'interfaccia con il file di configurazione, non con la DLL. In entrambi i

  1. Passo tutte le impostazioni devono essere letti/modificati all'interno della DLL come parametri, o

  2. Passo in una collezione nome-valore di impostazioni che possono essere modificate dalla DLL, e salvare tutte le modifiche vengono creati dalla DLL alla raccolta quando il controllo ritorna all'applicazione chiamante.

Questo è simile in linea di principio alla rimozione di un'interfaccia di database dal livello aziendale di un'applicazione a livelli e incapsulandolo in un livello dati.

2

Non ha senso per me avere una DLL che memorizza le impostazioni dell'utente. Una DLL è una libreria, non un'applicazione e non interagisce direttamente con l'utente. Se le classi nella DLL richiedono l'accesso alle impostazioni dell'utente, è possibile passarle come parametri.

+0

DLL non sono solo librerie. Hai DLL che sono plugin e hanno interfacce diverse che possono scambiare hot mentre l'app principale è in esecuzione. Se il plugin richiede credenziali di rete o qualcosa del genere, è necessario che la DLL sia in grado di leggere il set di configurazione nell'applicazione principale. Non devi cambiare il costruttore di migliaia di plugin perché uno di questi ha bisogno di un valore aggiuntivo – Franck

2

La classe Proprietà viene generata automaticamente. È davvero un wrapper nel file di configurazione. Se non si desidera modificare il progetto, basta inserire il codice e copiarlo nella DLL. Ma ricorda che non sarà più mantenuto magicamente (rigenerato). Oppure puoi usare ConfigurationManager per ottenere direttamente il file di configurazione.

0

non vorrei consigliamo vivamente (meglio usare la propria classe per le impostazioni), ma si può provare questo:

string sectionName = "applicationSettings/" + 
      appName + ".Properties.Settings"; 
     System.Configuration.ClientSettingsSection section = 
      (System.Configuration.ClientSettingsSection) 
      System.Configuration.ConfigurationManager.GetSection(sectionName); 
     foreach (SettingElement setting in section.Settings) 
     { 
      string value = setting.Value.ValueXml.InnerText; 
      string name = setting.Name; 
      if (name.ToLower().StartsWith(searchName.ToLower())) 
      { 
       return value; 
      } 
     } 
0

Per coloro che hanno bisogno di leggere le impostazioni da userDirectory/user.config, ecco una soluzione:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal); 
ConfigurationSectionGroup userSettings = config.GetSectionGroup("userSettings"); 
ClientSettingsSection settings = (ClientSettingsSection)userSettings.Sections.Get("[applicationName].Properties.Settings"); 
SettingElement elem = settings.Settings.Get([settingName]); 
var sett = elem.Value.ValueXml.InnerText; 
Problemi correlati