Domanda

Sto cercando di sottrarre tutto il codice del database in una libreria separata e quindi utilizzare quella libreria in tutto il mio codice. Tutte le connessioni al database vengono eseguite utilizzando TableAdapters digitati che creo trascinando i set di dati in VS2005, utilizzando una stringa di connessione dalle appSettings.

Il problema che non sono stato in grado di risolvere è che .Net non propaga le impostazioni delle librerie all'app all'altro progetto che lo sta utilizzando.

In breve, ho una libreria di livelli di database, MyProgram.DbLayer, che viene utilizzata da altri progetti come MyProgram.Client ecc. Quando avevo tutti i set di dati in .Client, connectionString era in MyProgram.Client.exe. config in modo da poterlo modificare dopo la compilazione. Quando l'ho spostato in MyProgram.DbLayer quell'impostazione non è disponibile per me dopo aver creato i binari.

EDIT: Questo sembra essere un problema più generale con ApplicationSettings.

Quello che ho notato è che se aggiungo manualmente un'impostazione utilizzata solo in una libreria verrà letta correttamente. L'unica cosa di cui ho bisogno ora è che l'impostazione venga automaticamente inclusa anche nel file .config.

È stato utile?

Soluzione

AppSettings / ConnectionStrings verrà sempre letto dal pool di app attualmente in esecuzione.

Con questo intendo:

Se ho A.exe che ha una classe DAL.cs. DAL.cs legge una stringa di connessione da config e restituisce "abc" come previsto.

Spingo quindi DAL.cs nel suo progetto, e quindi nel suo assemblaggio. Posso ancora farlo chiamare la stringa di connessione da app.config, tuttavia, dovrò & Quot; host & Quot; l'assembly in un'applicazione in esecuzione e aggiungi la stringa di connessione alla configurazione dell'app dell'applicazione . Quindi, creo un nuovo app.config e specifica la stringa di connessione "xyz" in esso, quando viene eseguita, funziona come previsto.

Ora, se cambio il riferimento nel progetto DAL.dll per usare il nuovo <=>, quale stringa di connessione pensi che avrà? <=>? No! Utilizzerà <=> come in precedenza perché è ancora configurato nel file di configurazione dell'applicazione per <=>.

So che funziona perché ho usato il codice DAL condiviso su molte applicazioni Web e di Windows.

Se qualcosa di tutto ciò non è chiaro o non risolve il problema, per favore fatemi sapere commentando questa risposta.

Aggiorna il seguente commento dall'OP

Per " host " Intendo un'applicazione che richiede il codice comune. Può trattarsi di un'applicazione Windows o Web, sostanzialmente è il contesto dell'applicazione.

Sarà necessario creare voci nei file di configurazione per ogni applicazione che utilizza il codice comune. Se ho frainteso la tua domanda originale (del tutto possibile, è stata una lunga giornata!) E desideri centralizzare anche la configurazione, allora dovresti:

  • Crea una qualche forma di archiviazione centralizzata (sia essa XML, DB, qualunque cosa).
  • Migliora il tuo codice comune per avere valori predefiniti che gli consentano di connettersi all'archivio centralizzato.
  • Da lì, il codice può quindi configurarsi da solo, in base alle informazioni nell'archivio di configurazione.

Spero che questo aiuti :)

Altri suggerimenti

Se capisco correttamente il tuo problema, sembra che tu abbia bisogno

1.) Un contesto applicativo comune per tutte le chiamate di accesso ai dati

o

2.) Un modo diverso di accedere alle impostazioni di configurazione

1: avvolgi il tuo livello dati in un servizio che viene eseguito in un unico contesto (IIS, servizio Windows, ecc.)

2: non utilizzare il meccanismo di gestione della configurazione fornito. Utilizza invece i file delle proprietà in una posizione specifica.

Non dimenticare, tuttavia, che le impostazioni di configurazione arrivano da livelli diversi. Ad esempio ... se aggiungi un'impostazione in machine.config, ogni applicazione in esecuzione su quella macchina utilizzerà quell'impostazione a meno che non venga sostituita a un livello inferiore ... Questo potrebbe essere un buon modo per configurare un'impostazione standard all'interno del tuo file di configurazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top