5

Nella mia soluzione .net 4, ho due progetti diversi: un progetto di applicazione Web e un progetto di libreria di classi.Ottieni la stringa di connessione nel progetto di libreria di classi in una soluzione

Nel progetto di applicazione Web, la stringa di connessione al database si trova nel file web.config. Vorrei accedere a quella stringa di connessione dal progetto della libreria di classi. È possibile? se sì, come?

Se c'è un approccio migliore per ottenere la stringa di connessione, per favore fatemelo sapere.

risposta

5

Per accedervi dalla libreria di classi aggiungere un riferimento a System.Configuration quindi utilizzare System.Confinguration.ConfigurationManager.ConnectionStrings.

Non è l'ideale per leggere questo da una libreria di classi. Dopotutto, puoi dire che la tua libreria di classi sarà sempre consumata da qualcosa con un file di configurazione? Certamente no se lo condividi con altri sviluppatori, specialmente su piattaforme diverse.

considerare:

  1. CIO - utilizzare l'iniezione di dipendenza per fornire una dipendenza che contiene le impostazioni di configurazione. Questi sarebbero popolati dalla libreria di consumo (web app).
  2. Passare le impostazioni alla libreria di classi quando si utilizzano elementi che dipendono da esse.

es .:

public class MyLibraryContainer 
{ 
    private string _connectionString; 

    public MyLibraryContainer(string connectionString) 
    { 
     _connectionString = connectionString; 
    } 
} 
+0

"puoi dire che la tua libreria di classi sarà sempre consumata da qualcosa con un file di configurazione?" Dal momento che la libreria è stata scritta in C#, penso che questa sia un'ipotesi valida. Detto questo, sono d'accordo che l'accesso a 'ConfigurationManager' direttamente nella libreria di classi è sbagliato, poiché questa funzionalità non rientra nell'ambito della libreria. –

+1

@EladLachmi "Dal momento che la libreria è stata scritta in C#, penso che questa sia un'ipotesi valida". Non sono d'accordo. Solo perché la libreria è scritta in C# non significa che sarà consumata da una soluzione .NET. Potrebbe essere, per esempio, iterop'd in java o qualsiasi altra cosa per quella materia. Ora mi incuriosisci cosa succederebbe se avessi usato il gestore di configurazione in una libreria il cui chiamante non ha supporto. Ce n'è uno per l'elenco TODO! :) –

+0

@EladLachmi D'altra parte, se hai scritto questo, e non hai intenzione di condividerlo, sarebbe un'ipotesi più sicura. –

1

Nel progetto di app Web creare una classe statica con un metodo statico in cui si restituisce la stringa di connessione, inserire il riferimento nel progetto di libreria di classi e chiamare il metodo creato.

+0

Questo è di gran lunga la soluzione più semplice. –

+7

Non si ottiene un errore di riferimento circolare poiché la libreria di classi dovrebbe fare riferimento al progetto Web per accedere a questa classe statica e il progetto Web ovviamente farebbe già riferimento alla libreria di classi? – ScubaSteve

+0

Questa non è la soluzione giusta. La libreria di classi deve essere referenziata in diversi progetti, quindi non è la giusta chiamata per aggiungere il riferimento webapp nella libreria di classi. In questo caso, la dipendenza della libreria di classi è scomparsa. –

Problemi correlati