2010-07-15 13 views
8

Estoy escribiendo una biblioteca de clase como una abstracción para usar para iniciar sesión en cualquier aplicación, servicio, etc. que escriba. Lo estoy haciendo decentemente robusto al hacerlo muy configurable para satisfacer mis necesidades para la mayoría de los escenarios de registro de aplicaciones/servicios que encuentro.¿Aplicar un App.config a mi conjunto de DLL?

La configuración está diseñada para especificar cosas como:

  • Qué nivel de registro para escribir
  • de escritura a un archivo de registro para todos los niveles
  • de escritura a los archivos separados por nivel
  • Corte de registro (periódico, evento de aplicación, tamaño de bytes restringido)
  • Expiración del archivo de registro (eliminar archivos de registro después de la antigüedad del archivo)
  • Escribir texto plano o XML
  • especificación de formato de registro de nombre de archivo
  • Ya sea como prefijo para el nombre de archivo con fecha
  • Padres nombre de aplicación
  • etc, etc, etc ...

I He leído algunas otras preguntas de stackoverflow con respecto a las configuraciones para ensamblajes de DLL y causando conflicto entre el app.config para el ensamblado/aplicación de hosting. Creo que mi ensamblado solo tiene motivos para proporcionar un archivo de configuración.

¿Es este un buen escenario para esa ocasión? ¿Es quizás una mejor idea incluir mi propia configuración en mi proyecto para que mi registrador lea los archivos XML para recuperar los valores de configuración?

+2

Eche un vistazo a las bibliotecas existentes de registro, p. apaches log4net http://logging.apache.org/log4net/index.html - este también se puede extender fácilmente. Tal vez no vale la pena escribir una biblioteca de registro completamente nueva. –

+0

@bja, gracias por la sugerencia. Escribí una gran cantidad de código de registro para un proyecto en el que estoy trabajando y decidí utilizar la mayoría del código como base para futuras aplicaciones. Intenté trabajar con un framework de registro previamente y me sentí frustrado porque mi departamento. quiere usar .Net 4.0 y tuve problemas para obtener una lib o dos para trabajar con él. Así que terminé implementando mi propio registro liviano. Muchas gracias por la sugerencia, sin embargo, normalmente estoy de acuerdo con esa idea, pero no da una razón para no reutilizar mi propio código. – jlafay

+0

@jlafay Sugiero que los examine de todos modos, no para reutilizar su código, sino para ver cómo implementan la configuración a través del archivo App.config, es muy común que se configure un marco de registro a través de la aplicación. Archivo de configuración, y puede seguir la misma práctica con su propio marco. :-) – BrainSlugs83

Respuesta

8

Lo que podría hacer es

  • crear una sección de configuración personalizada (por ejemplo, usandola herramienta COnfiguration Section Designer)

  • poner la configuración de su montaje en un archivo separado MyAssembly.config

  • de referencia que archivo de ensamblaje de configuración de configuración de la aplicación host:

    <configuration> 
        <configSections> 
         <section name="YourAssembly" 
           type="YourAssembly.ConfigSection, YourAssembly" /> 
        </configSections> 
    
        <YourAssembly configSource="MyAssembly.config" /> 
    </configuration> 
    

De esta manera, se puede " externalize "su configuración en un archivo de configuración separado que tiene una sola vez (en el proyecto de su ensamblaje), y cualquier proyecto que lo necesite solo necesita esa configuración en su propio archivo de configuración.

+0

+1 para el enlace. He estado escribiendo manualmente las clases ConfigurationSection y ConfigurationSectionGroup durante años. ¡Esta herramienta parece un salvavidas! – Toby

+0

Creo que esta es la mejor solución para mis necesidades de configuración. ¡Gracias por el enlace al diseñador de la sección de configuración también! – jlafay

3

Parece que una sección de configuración personalizada funcionaría bien en su caso. Muchas bibliotecas, como Enterprise Library, hacen exactamente esto. Consulte MSDN article para crear uno.

3

El mecanismo de configuración de .NET no está destinado a manejar archivos de configuración para archivos DLL. Debe configurar su aplicación con la configuración adecuada y pasarla a la clase que está instanciando desde la DLL.


Es posible agregar configuraciones a un proyecto DLL como lo haría normalmente para las aplicaciones. Todo lo que necesita hacer es copiar las secciones y entradas relevantes en la aplicación app.config manualmente y funcionará.

Sin embargo, sigue siendo cierto que no tiene sentido copiar el archivo de configuración de la DLL. No será leído.

+1

Dado que usaré esto para una amplia gama de aplicaciones de software, ¿no sería mejor configurarlo sobre la marcha con un archivo de configuración que podría editar a mano rápidamente en lugar de poblar propiedades al crear instancias de un registrador en el aplicación de host? – jlafay

+0

@jlafay - no, entonces está agregando una dependencia oculta a su DLL. Aún puede crear un archivo de configuración: simplemente haga que sus * aplicaciones * lean el archivo de configuración (o una parte de ese archivo que copie en sus configuraciones) y transfiera la configuración a las clases desde su archivo DLL. (y +1.) –

+0

Err ..., muchos dlls requieren cambios de archivos .config (especialmente dlls de frameworks de registro). Simplemente agregue las secciones de configuración relevantes a su app.config, y todo funciona sin cambios de código adicionales. – BrainSlugs83

2

Otro mecanismo es tener un archivo de configuración independiente (* .dll.config) para su ensamblaje. La técnica se muestra aquí: http://blog.rodhowarth.com/2009/07/how-to-use-appconfig-file-in-dll-plugin.html

Lo anterior, imite la técnica estándar app.config para ensamblajes.

En mi opinión, el código de lectura de la configuración dll solo debería existir en la dll correspondiente y en una clase separada, con la responsabilidad única de leer las entradas de configuración desde * .dll.config. Esta es una buena manera de tener un archivo de configuración para un ensamblaje de forma similar al archivo de configuración (app.config) que puede tener un ejecutable.

Cuestiones relacionadas