ApplicationSettings en las bibliotecas

votos
0

Estoy intentando 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 utilizando TableAdapters tipeados que creo arrastrando y soltando conjuntos de datos en VS2005, usando una cadena de conexión desde appSettings.

El problema que no he podido resolver es que .Net no propaga las bibliotecas appSettings al otro proyecto que lo está usando.

En resumen, tengo una biblioteca de capa de base de datos, MyProgram.DbLayer, que es utilizada por otros proyectos como MyProgram.Client, etc. Cuando tenía todos los datasets en .Client, ConnectionString estaba en MyProgram.Client.exe.config para que Podría cambiarlo después de la compilación. Cuando lo moví al MyProgram.DbLayer esa configuración no está disponible después de que construí los 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 se incluya automáticamente en el archivo .config también.

Publicado el 09/12/2008 a las 15:59
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
1

Si entiendo tu problema correctamente, parece que necesitarás

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 los archivos de propiedades en una ubicación específica.

Sin embargo, no olvides que la configuración de configuración cae en cascada desde diferentes niveles. Por ejemplo ... si agrega una configuración en machine.config, entonces cada aplicación que se ejecute en esa máquina usará esa configuración a menos que sea reemplazada en un nivel inferior ... Esa puede ser una buena manera de configurar una configuración estandarizada dentro de su máquina. Archivos de configuración.

Respondida el 09/12/2008 a las 16:22
fuente por usuario

votos
1

AppSettings / ConnectionStrings siempre se leerán desde el grupo de aplicaciones en ejecución.

Con esto quiero decir:

Si tengo A.exeque tiene una clase DAL.cs. DAL.cs lee una cadena de conexión de config, y regresa "abc"como se esperaba.

Luego muevo DAL.cs a su propio proyecto y, por lo tanto, a su propio ensamblaje. Todavía puedo hacer que llame a la cadena de conexión desde app.config; sin embargo, necesitaré "alojar" el ensamblaje en una aplicación en ejecución y agregar la cadena de conexión a la configuración de esa 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 A.exeproyecto para usar la nueva DAL.dll, ¿qué cadena de conexión crees que tendrá? "xyz"? ¡No! Utilizará el "abc"como lo hacía antes porque todavía está configurado en el archivo de configuración de la aplicación A.exe.

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

Si algo de esto no está claro o no ayuda con su problema, hágamelo saber al comentar esta respuesta.

Actualice el siguiente comentario de OP

Por "host" me refiero a una aplicación que llama al código común. Esto puede ser una aplicación de Windows o una aplicación web, básicamente es el contexto de la aplicación.

Tendrá que crear entradas en los archivos de configuración para cada aplicación que use el código común. Si malinterpreté su pregunta original (¡es totalmente posible, ha sido un día largo!) Y desea centralizar también la configuració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 :)

Respondida el 09/12/2008 a las 16:14
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more