È possibile passare un'impostazione dell'app in web.config a una classe C # comune

StackOverflow https://stackoverflow.com/questions/213509

  •  03-07-2019
  •  | 
  •  

Domanda

È possibile passare un'impostazione di app " string " nel web.config in una classe C # comune?

È stato utile?

Soluzione

Ovviamente è possibile - ma la cosa da tenere a mente è che una classe progettata correttamente (a meno che non sia esplicitamente progettata per ASP.NET) non dovrebbe sapere o preoccuparsi della provenienza delle informazioni. Dovrebbe esserci una proprietà (o metodo, ma le proprietà sono il modo più ".NET" di fare le cose) che si imposta con il valore di stringa dall'applicazione stessa, piuttosto che avere la classe prendere direttamente informazioni da web.config.

Altri suggerimenti

In qualsiasi classe puoi usare ConfigurationManager.AppSettings [" KeyToSetting "] per accedere a qualsiasi valore nell'elemento web.config (o app.config)

Se si hanno valori di configurazione utilizzati in molti luoghi, prendere in considerazione lo sviluppo di una classe di configurazione che astragga il caricamento effettivo degli elementi di configurazione e fornisca valori e conversioni fortemente tipizzati e valori potenzialmente predefiniti.

Questa tecnica localizza l'accesso al file di configurazione facilitando il cambio delle implementazioni in un secondo momento (diciamo invece memorizzare nel registro) e lo rende così i valori devono essere letti dal file solo una volta - anche se, spero che la configurazione manager verrebbe implementato anche in questo modo e leggerà tutti i valori la prima volta che verrà utilizzato e li fornirà da un archivio interno agli accessi successivi. Il vero vantaggio è la tipizzazione forte e le conversioni una tantum, credo.

public static class ApplicationConfiguration
{
    private static DateTime myEpoch;
    public static DateTime Epoch
    {
       get
       {
          if (myEpoch == null)
          {
              string startEpoch = ConfigurationManager.AppSettings["Epoch"];
              if (string.IsNullOrEmpty(startEpoch))
              {
                 myEpoch = new DateTime(1970,1,1);
              }
              else
              {
                 myEpoch = DateTime.Parse(startEpoch);
              }
          }
          return myEpoch;   
       }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top