Accesso web.config dalla Libreria di classi separato?

Sto cercando un buon modo per ottenere i seguenti:

Ho un’applicazione web MVC (3), con una Classe separata Libreria che contiene il back-end logica di un CMS che sto facendo. Questo CMS utilizza NHibernate per connettersi a un database. Voglio che l’utente sarà in grado di configurare la proprietà connectionstring (ed eventualmente anche il sapore del database nel web.file di configurazione.

Quello che sto cercando è un buon modo per ottenere la stringa di connessione dal web.file di configurazione, anche se la DLL è completamente separato. È possibile questo? Dovrò passare la mia stringa di connessione per la mia libreria di classi in qualche modo? O sarò in grado di accedere quando l’applicazione viene eseguita?

Se devo creare un po ‘ di codice nella mia applicazione web per passare la stringa di connessione per la mia Libreria di classi, come posso rendere il codice più portabile possibile, così non devo scrivere di nuovo per la mia prossima webapp?

Grazie mille per tutte le idee che avete.

 

6 Replies
  1. 18

    È possibile passare la stringa di connessione per le classi della libreria di classi dal sito web.

    Questa è una scelta migliore rispetto a cercando di ottenere le informazioni direttamente dal file di configurazione, altrimenti si avrà una dipendenza sul file di configurazione esistente con l’esatta chiave (facendo il test la classe un po ‘ più difficile).

    Vedere questo post del blog per gli argomenti contro l’accesso di configurazione direttamente (che è molto comunemente, ma non è la migliore pratica).

    • +1 per facilitare il test. Separare l’ottenimento della configurazione di utilizzo
  2. 11

    È possibile accedere Sistema.Di configurazione.ConfigurationManager dalla tua libreria di classi. Che ti darà accesso a AppSettings e ConnectionStrings.

    • Cattiva idea. La configurazione è una dipendenza e dovrebbe essere passati direttamente. devtrends.co.uk/blog/…
    • implementazione di un’interfaccia non è da meno di una seccatura di aggiunta di elementi a un app.config. Inoltre, non tenga conto di diverse caratteristiche di sicurezza incorporate nel .net configuration manager, come la capacità di crittografare le stringhe di connessione e il fatto che web.config non possono essere modificate dall’applicazione. Per non parlare che tutti utilizzando la libreria dovrà anche imparare un nuovo modo per configurare le cose invece di utilizzare uno standard del settore.
    • Il fatto che questa è una tecnica ampiamente utilizzata non è una buona abitudine. Se si prova il livello di accesso ai dati, bisogna aggiungere i file di configurazione per il test assemblee.
    • se avete bisogno di una configurazione di attuazione per essere passata nelle vostre classi, ti costringe a implementare un’interfaccia. Non vedo nessuna differenza di fastidio.
    • Non è la fastidio. Si tratta di avere una statica di dipendenza.
  3. 2

    È possibile utilizzare il ConfigurationManager di classe per l’accesso a elementi del sito web.config o app.file di configurazione. Tuttavia, nella libreria di classi, essere sicuri di prendere il nome di chiave di qualsiasi appSettings e/o connectionString impostazioni dal consumatore (preferibilmente nel costruttore). Questo evita il problema della scelta di un nome di chiave che il consumatore è già in uso altrove.

  4. 1

    Ho esattamente la stessa configurazione con un FOSS progetto sono coinvolti con. Esso contiene tutto (anche il Controller e Globale.asax.cs) nel ‘Core’ libreria di classi.

    C’è un sacco di soluzioni valide, quello che ho scelto era quello di creare un Impostazioni di classe, che è essenzialmente un insieme di proprietà statiche, all’interno della quale si hanno:

    public static string ConnectionString
    {
            get { return ConfigurationManager.ConnectionStrings["MYAPP"].ConnectionString; }
    }

    Nota: assicurarsi che la vostra libreria di classi è di Sistema.Configurazione aggiunto come riferimento.

    All’interno della vostra Applicazione (classe derivata da HttpApplication) si passa il tutto, anche se non c’è nulla per fermare tighly giunto il NH installazione con le impostazioni di classe:

    protected void Application_Start()
    {
            AreaRegistration.RegisterAllAreas();
            RegisterRoutes(RouteTable.Routes);
            SetupNHibernate();
    }
    
    public virtual void SetupNHibernate()
    {
            NHibernateRepository.Current.Configure(RoadkillSettings.DatabaseType, Settings.ConnectionString, false, Settings.CachedEnabled);
    }

    Se questo è di alcuna utilità per voi, la fonte è qui.

  5. 0

    Dal momento che si utilizza la libreria di classi per l’applicazione del web MVC, è accessibile per la libreria di classi anche. Nessuna impostazione aggiuntiva. Anche se la classe di una biblioteca costruita dando una dll separata, si è fatto riferimento nel progetto corrente. Quindi la stringa di connessione sarà a disposizione della classe, anche la biblioteca.

  6. 0

    Mi piacerebbe andare con qualcosa di simile Autofac di darvi alcuni Cio implementazione è possibile memorizzare le impostazioni di interfaccia per le stringhe di connessione. Questo consente di impostare il valore dal web.config avvio dell’applicazione, o per impostare l’test su un valore diverso senza la vostra Libreria di classi dover mai essere accoppiato al web.config.

Lascia un commento