2012-03-21 4 views
5

He estado usando los siguientes marcos de configuración de cosecha propia para administrar la configuración de mis proyectos durante algunos años:Sustitución de marcos de configuración, que buscan una alternativa

  1. El primero se imita .properties archivos de Java (un montón de líneas supergroup.subgroup.property=value con soporte para colecciones) y funciona bien para muchas situaciones (me parece que es mejor para aplicaciones pequeñas). Esto es bueno para la configuración muy simple

  2. Un segundo basado en DataContractSerializer (y opcionalmente XmlSerializer) que permite toda la funcionalidad de la primera con todas las ventajas de XML y menos de fontanería para hacer que funcione. Este es bueno pero impráctico y engorroso de manejar sin una interfaz de usuario explícita sobre la parte superior para mitigar los dolores de cabeza de enseñar a los usuarios finales a modificar XML.

Tanto de los marcos Mariscal existente hacia y desde POCOs sin problema para permitir el acceso a los valores de configuración a través de propiedades/campos (a través de manual de serialización/automático respectivamente), por lo que son muy fáciles de trabajar con como desarrollador.

Ahora que estoy revisando su capacidad para habilitar la base de datos y la configuración fluida, estoy buscando una alternativa lista para usar (preferiblemente de código abierto). No tengo problemas para volver a trabajar en todos mis proyectos existentes si puedo reducir la duplicación de código innecesaria y permitirles el acceso a la base de datos y la configuración fluida (además de sus capacidades existentes).

¿Alguna sugerencia o vale la pena hacerla mía para obtener las características que estoy buscando?

En mi investigación encontré this pregunta potencialmente duplicada que fue respondida por Nini pero no se ha actualizado en casi 2 años y solo es compatible con las opciones que ya he cubierto (en función de su documentación de todos modos). ¿Me perdí algo en mi investigación o hay una mejor alternativa?

actualización

Las características explícitas que busco son:

  • archivos XML
  • INI/Java-como properties archivos
  • base de datos (al menos MS SQL y SQLite, opcionalmente MySQL y cualquier otro como se pueda imaginar)
  • Fluido (no se requiere generación de código)
  • Algún tipo de API de extensión que me permite agregar mis propias fuentes
  • Definitivamente necesita serializar a/desde cualquiera de las fuentes de datos para poder acceder a través de propiedades/campos.
  • apoyo Enumeración

estaría interesado en la ampliación de un marco existente si es lo suficientemente abierta como para hacer lo que tengo que hacer, pero por lo demás, probablemente no es una buena opción.


ACTUALIZACIÓN

La funcionalidad de la System.Configuration espacio de nombres existente es grande, y estoy familiarizado con lo bien que puede funcionar, pero en general no hace lo que yo estoy buscando. Lo he usado (incluso en escenarios avanzados) pero dado que solo permite una extensibilidad limitada de XML: simplemente no es lo que busco.

Si tengo que ceder en cualquiera de las funcionalidades predefinidas, diría que la configuración fluida es la menos importante (de todas maneras, sería extremadamente difícil proporcionar una interfaz valiosa para esto genéricamente). Arrebataré algo sobre lo que encuentre.

El simple hecho de que hayan sido más de 24 horas (y> 125 vistas) y nadie ha sido capaz de ofrecer una alternativa razonable me dice que probablemente no exista. Comenzaré solo con la esperanza de que alguien pueda ofrecer una alternativa interesante.

+0

¿Puede explicitar las características que está buscando? Acceso a DB (lo que significa almacenamiento de la configuración en un repositorio central, supongo) y una configuración fluida. ¿Algo más? –

+0

@VincentHubert - Actualizado con requisitos mínimos. –

+1

en términos de reelaboración de proyecto, tenga en cuenta Interfaz no implementación - en mi humilde opinión, este es el tipo de cosa donde se crea una interfaz que define cómo desea que su código pueda interactuar con lo que sea que sea el marco de configuración actual. Entonces, si algo no satisface todas sus necesidades, puede simplemente 'completar los espacios' para implementar la interfaz –

Respuesta

2

Crear un administrador de configuración de propósito general es una tarea muy exigente. Con los años, no he visto ningún marco de configuración emergente y no creo que lo haga. Simplemente eche un vistazo al espacio de nombres System.Configuration y podrá ver lo caro que sería tratar de hacer coincidir un conjunto similar de características. La mayoría de las veces, los requisitos de configuración son muy específicos del proyecto y no hay una solución mágica.

Mi consejo sería que se apegue a su propia solución, siempre que sea fácilmente comprobable por la unidad y haga el trabajo.

+0

Estoy de acuerdo en que crear uno llevaría mucho tiempo, incluidas las horas de golpear mi cabeza en mi escritorio. También estoy de acuerdo en que una solución de "un tamaño se ajusta a todos" de fábrica es una solicitud irrazonable y es probable que el código personalizado deba escribirse/generarse. Es por eso que pregunté sobre una configuración _framework_ en lugar de una configuración _manager_. Idealmente sería más como WCF; una serie de juguetes de juguete que se pueden pegar entre sí de diferentes maneras para lograr un objetivo común, solo tienes que hacer el pegamento por ti mismo. –

+2

Tampoco encontré un marco así (aunque a lo largo de los años he construido una buena colección o clases relevantes). Por cierto, incluso la palabra "como WCF" es aterradora (dado el tamaño de WCF!). –

+0

Ni yo tampoco, desafortunadamente. +1 para dar la respuesta racional (léase: cuerdo), pero voy a seguir buscando una solución. –

2

Por favor compruébelo Cinchoo Configuration Framework, ofrece la mayoría de las funciones que busca.

Aquí es la forma más sencilla de definir y utilizar el objeto de configuración utilizando el framework Cinchoo

namespace HelloWorld 
{ 
    #region NameSpaces 

    using System; 
    using Cinchoo.Core.Configuration; 

    #endregion NameSpaces 

    [ChoConfigurationSection("sample")] 
    public class SampleConfigSection : ChoConfigurableObject 
    { 
     [ChoPropertyInfo("name", DefaultValue="Mark")] 
     public string Name; 

     [ChoPropertyInfo("message", DefaultValue="Hello World!")] 
     public string Message; 
    } 

    static void Main(string[] args) 
    { 
     SampleConfigSection sampleConfigSection = new SampleConfigSection(); 
     Console.WriteLine(sampleConfigSection.ToString()); 
    } 

} 

primera vez, cuando se ejecuta la aplicación, el marco Cinchoo genera automáticamente la sección de configuración de la siguiente manera. Luego, puede controlarlos a través de la fuente de configuración o por código.

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="sample" type="Cinchoo.Core.Configuration.ChoNameValueSectionHandler, Cinchoo.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b7dacd80ff3e33de" /> 
    </configSections> 
    <sample> 
    <add key="name" value="Mark" /> 
    <add key="message" value="Hello World!" /> 
    </sample> 
</configuration> 
0

La solución que tengo para que entre en el Resorte del marco .NET, que entre otros grandes características tienen la clase PropertyPlaceholderConfigurer.

Esta clase tiene como objetivo externalizar algunas de las propiedades que tiene en sus archivos de configuración xml. Por lo tanto, en lugar de escribir valores literales (como cadenas de conexión, contraseñas o cualquier otro parámetro), coloca marcadores de posición, como $ {sql.server}, $ {sql.contraseña} que se reemplazarán automáticamente por los valores externos.

Esos valores externos pueden estar en cualquier lugar. En el caso de mi empresa, dado que tenemos un sistema heredado que usa los mismos valores, los hemos incluido en el registro de Windows (que obviamente no recomiendo para nuevos proyectos).

Pero, tenga en cuenta que esta no es una característica independiente de Spring, viene con Spring.Core, y tendrá que usar los archivos de configuración de primavera y las funciones de Inyección de Dependencia.

http://www.springframework.net/doc-latest/reference/html/objects.html#objects-factory-placeholderconfigurer

+1

Parece que solo funciona con XML, que está bastante lejos de lo que estoy buscando y la perspectiva de integrar _todos los otros marcos en esto parece mucho trabajo. Definitivamente voy a echarle un vistazo más duro ya que dijiste que tu compañía lo está usando para la configuración del registro. ¿Sabes cuál fue la cantidad de esfuerzo para que funcione? Aunque requiere más de lo que busco, podría proporcionarme un modelo decente para mis esfuerzos. –

+0

Bueno, el esfuerzo principal es poner Spring trabajando en su proyecto. Si no tienes experiencia previa con Spring, puede ser un poco complicado e incluso doloroso. Pero, en mi opinión vale la pena. Creé un ejemplo muy simple y puse el código de google si quiere ver un ejemplo (http://code.google.com/p/spring-net-placeholder-example/). Espero eso ayude. – Beccari

Cuestiones relacionadas