2012-03-21 19 views
5

Sto usando i seguenti framework di configurazione home-grown per gestire la configurazione dei miei progetti per un paio di anni a questa parte:Sostituzione framework di configurazione, alla ricerca di una alternativa

  1. I primi uno imita i file di Java .properties (un gruppo di linee supergroup.subgroup.property=value con supporto per le raccolte) e funziona bene per molte situazioni (trovo che sia il migliore per le piccole applicazioni). Questo è buono per molto semplice configurazione

  2. Un secondo basato su DataContractSerializer (e facoltativamente XmlSerializer) che consente tutte le funzionalità del primo con tutti i vantaggi di XML e meno idraulici per farlo funzionare. Questo è buono ma poco pratico e ingombrante da gestire senza un'interfaccia utente esplicita sopra di esso per mitigare i grattacapi di insegnare agli utenti finali a modificare XML.

Entrambi i quadri maresciallo esistente da e POCOS senza problemi per consentire l'accesso ai valori di configurazione attraverso proprietà/campi (attraverso manuale/serializzazione automatica rispettivamente), quindi sono molto facili da lavorare come sviluppatore.

Ora che sto rivedendo la loro capacità di abilitare il database e la configurazione fluente, sto cercando un'alternativa pronta all'uso (preferibilmente open source). Non ho alcun problema a rielaborare tutti i miei progetti esistenti se riesco a ridurre la duplicazione di codice non necessaria e consentire loro l'accesso a DB e una configurazione fluente (oltre alle loro capacità esistenti).

Qualche suggerimento o vale la pena girare il mio per ottenere le funzionalità che sto cercando?

Nella mia ricerca ho trovato this domanda potenzialmente duplicato cui risponde Nini ma non è stato aggiornato in quasi 2 anni e supporta solo le opzioni ho già coperti (basata sulla sua documentazione in ogni caso). Ho perso qualcosa nella mia ricerca o c'è un'alternativa migliore?

Aggiornamento

Le caratteristiche esplicite che sto cercando sono:

  • file XML
  • INI/Java-like properties file
  • Database (almeno MS SQL e SQLite, opzionalmente MySQL e qualsiasi altro come si possa immaginare)
  • Fluente (generazione codice non richiesta)
  • Una sorta di API di estensione per consentirmi di aggiungere le mie fonti
  • È necessario serializzare su/da una qualsiasi delle origini dati per essere accessibile tramite proprietà/campi.
  • supporto Enumeration

Sarei interessato ad estendere un quadro esistente se è abbastanza aperta per fare quello che devo fare, ma per il resto probabilmente non è una buona misura.


UPDATE

La funzionalità dal System.Configuration spazio dei nomi esistente è grande, e io sono a conoscenza di come ben si può lavorare, ma in generale non fa quello che sto cercando. L'ho usato (anche in scenari avanzati) ma essendo che consente solo un'estensibilità XML limitata: non è quello che sto cercando.

Se devo dare una qualsiasi delle funzionalità predefinite, direi che la configurazione fluente è la meno importante (sarebbe estremamente difficile fornire comunque un'interfaccia valida per questo in genere). Metterò insieme qualcosa in cima a quello che trovo.

Il solo fatto che siano trascorse più di 24 ore (e più di 125 visualizzazioni) e nessuno è stato in grado di offrire un ragionevole alterativo mi dice che probabilmente non esiste. Inizierò da solo nella speranza che qualcuno possa fornire un'alternativa interessante.

+0

Puoi esplicita le caratteristiche che sono dopo? Accesso al DB (che significa memorizzazione della configurazione in un repository centrale, credo) e configurazione fluente. Qualunque altra cosa? –

+0

@VincentHubert - Aggiornato con i requisiti minimi. –

+1

in termini di progetto di rilavorazione, tenere a mente interfaccia non Implementazione - IMHO, questo è il genere di cose in cui si crea un'interfaccia che definisce come si desidera che il codice sia in grado di interagire con qualsiasi cosa sembra essere il quadro attuale configurazione. Quindi se qualcosa non soddisfa tutte le tue esigenze, puoi semplicemente "colmare le lacune" per implementare l'interfaccia –

risposta

2

La creazione di un gestore configurazione generico è un'attività molto impegnativa. Nel corso degli anni, non ho visto alcun quadro di configurazione emergente e non ho intenzione di farlo. Basta dare uno sguardo allo spazio dei nomi System.Configuration e puoi vedere quanto sarebbe costoso cercare di abbinare un insieme simile di funzionalità. Il più delle volte, i requisiti di configurazione sono molto specifici del progetto e non vi è alcun punto d'argento.

Il mio consiglio sarebbe quello di attenersi alla propria soluzione, purché sia ​​facilmente testata da unità e funzioni.

+0

Sono d'accordo sul fatto che crearne uno sarebbe molto dispendioso in termini di tempo, comprese le ore di battere la testa sulla mia scrivania. Sono anche d'accordo sul fatto che una soluzione adatta per tutte le soluzioni out-of-the-box sia una richiesta irragionevole e che il codice personalizzato debba ancora essere scritto/generato. Ecco perché ho chiesto una configurazione _framework_ piuttosto che una configurazione _manager_. Idealmente sarebbe più simile a WCF; una serie di giocattoli armonici che possono essere incollati insieme in modi diversi per raggiungere un obiettivo comune, devi solo fare la colla da solo. –

+2

Non mi sono mai imbattuto in un simile quadro (sebbene nel corso degli anni ho costruito una collezione piuttosto o classi rilevanti). A proposito, anche la parola "come WCF" è spaventosa (date le dimensioni di WCF!). –

+0

Neanche io, sfortunatamente. +1 per dare la risposta razionale (leggi: sana), ma continuerò a cercare una soluzione. –

2

Si prega di controllare fuori Cinchoo Configuration Framework, offre la maggior parte delle funzionalità che stai cercando.

Qui è il modo più semplice per definire e utilizzare l'oggetto configurazione utilizzando quadro 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()); 
    } 

} 

prima volta, quando si esegue l'applicazione, quadro Cinchoo genera automaticamente la sezione di configurazione come sotto. Quindi, è possibile controllarli tramite la sorgente di configurazione o il codice.

<?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 soluzione che ho per voi rientri nel Spring Framework .NET, che tra le altre grandi caratteristiche hanno il PropertyPlaceholderConfigurer classe.

Questa classe mira a esternalizzare alcune delle proprietà presenti nei file di configurazione xml. Quindi, invece, annota valori letterali (come stringhe di connessione, password o altri parametri), metti segnaposti, come $ {sql.server}, $ {sql.password} che saranno automaticamente sostituiti dai valori esterni.

Questi valori esterni possono essere ovunque. Nel caso della mia azienda, dato che abbiamo un sistema legacy che utilizza gli stessi valori, li abbiamo inseriti nel registro di Windows (che ovviamente non è consigliato per i nuovi progetti).

Ma, essere consapevoli che questa non è una funzionalità autonoma di Spring, viene fornito con Spring.Core, e sarà necessario utilizzare i file di configurazione di primavera e le funzionalità di iniezione di dipendenza.

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

+1

Sembra che funzioni solo con XML, che è piuttosto lontano da quello che sto cercando e la prospettiva di integrare _all_ degli altri framework in esso sembra un sacco di lavoro. Darò sicuramente un'occhiata più difficile, anche se hai detto che la tua azienda lo sta usando per la configurazione del registro. Sai qual è stato lo sforzo per farlo funzionare? Anche se richiede più di quello che sto cercando, potrebbe fornire un modello decente per i miei sforzi. –

+0

Bene, lo sforzo principale è mettere Spring che lavori nel tuo progetto. Se non hai precedenti esperienze con Spring, può essere un po 'complicato e persino doloroso. Ma, a mio parere, ne vale la pena. Ho creato un esempio molto semplice e ho inserito il codice google se vuoi vedere un esempio (http://code.google.com/p/spring-net-placeholder-example/). Spero che sia d'aiuto. – Beccari

Problemi correlati