Pregunta

Estoy tratando de abstraer todo el código de la base de datos en una biblioteca separada y luego usar esa biblioteca en todo mi código. Todas las conexiones a la base de datos se realizan usando TableAdapters escritos que creo al arrastrar y soltar conjuntos de datos en VS2005, usando una cadena de conexión de appSettings.

El problema que no he podido resolver es que .Net no propaga las configuraciones de aplicaciones de la biblioteca al otro proyecto que lo está usando.

En resumen, tengo una biblioteca de capas de base de datos, MyProgram.DbLayer, que es utilizada por otros proyectos como MyProgram.Client, etc. Cuando tenía todos los conjuntos de datos en .Client, el connectionString estaba en MyProgram.Client.exe. config para poder cambiarlo después de la compilación. Cuando lo moví a MyProgram.DbLayer, esa configuración no está disponible para mí después de compilar los archivos binarios.

EDITAR: Este parece ser un problema más general con ApplicationSettings.

Lo que noté fue que si agrego manualmente una configuración que solo se usa en una biblioteca, se leerá correctamente. Lo único que necesito ahora es que la configuración también se incluya automáticamente en el archivo .config.

¿Fue útil?

Solución

AppSettings / ConnectionStrings siempre se leerá del grupo de aplicaciones que se está ejecutando actualmente.

Con esto quiero decir:

Si tengo A.exe que tiene una clase DAL.cs. DAL.cs lee una cadena de conexión desde la configuración y devuelve "abc" como se esperaba.

Luego muevo DAL.cs a su propio proyecto y, por lo tanto, a su propio ensamblado. Todavía puedo hacer que llame a la cadena de conexión desde app.config, sin embargo, necesitaré & Quot; host & Quot; el ensamblaje en una aplicación en ejecución y agregue la cadena de conexión a la configuración de la aplicación de aplicaciones . Entonces, creo un nuevo app.config y especifico la cadena de conexión "xyz" en él, cuando se ejecuta, se ejecuta como se esperaba.

Ahora, si cambio la referencia en el proyecto DAL.dll para usar el nuevo <=>, ¿qué cadena de conexión crees que tendrá? <=>? No! Utilizará el <=> como lo hacía antes porque todavía está configurado en el archivo de configuración de la aplicación para <=>.

Sé que esto funciona porque utilicé código DAL compartido en muchas aplicaciones web y de Windows.

Si algo de esto no está claro o no resuelve su problema, avíseme comentando esta respuesta.

Actualizar el siguiente comentario de OP

Por " host " Me refiero a una aplicación que está llamando al código común. Puede ser una aplicación de Windows o una aplicación web, básicamente es el contexto de la aplicación.

Deberá crear entradas en los archivos de configuración para cada aplicación que use el código común. Si entendí mal su pregunta original (¡completamente posible, ha sido un día largo!) Y desea centralizar la configuración también, entonces necesitaría:

  • Cree alguna forma de almacenamiento centralizado (ya sea XML, DB, lo que sea).
  • Mejore su código común para tener valores predeterminados que le permitan conectarse al almacenamiento centralizado.
  • A partir de ahí, el código puede configurarse a sí mismo, según la información en el almacén de configuración.

Espero que esto ayude :)

Otros consejos

Si entiendo su problema correctamente, parece que necesitará

1.) Un contexto de aplicación común para todas las llamadas de acceso a datos

o

2.) Una forma diferente de acceder a la configuración

1: Envuelva su capa de datos dentro de un servicio que se ejecuta en un contexto único (IIS, Servicio de Windows, etc.)

2: no utilice el mecanismo de gestión de configuración que se le proporciona. En su lugar, use archivos de propiedades en una ubicación específica.

Sin embargo, no olvide que los ajustes de configuración caen en cascada desde diferentes niveles. Por ejemplo ... si agrega una configuración en machine.config, cada aplicación que se ejecute en esa máquina usará esa configuración a menos que se reemplace en un nivel inferior ... Esa puede ser una buena manera de configurar una configuración estandarizada dentro de su archivos de configuración.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top