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
El primero se imita
.properties
archivos de Java (un montón de líneassupergroup.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 simpleUn segundo basado en
DataContractSerializer
(y opcionalmenteXmlSerializer
) 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.
¿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? –
@VincentHubert - Actualizado con requisitos mínimos. –
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 –