Fornire punti di estensione alla libreria

0

Ho una libreria che fornisce una logica comune per la lettura delle impostazioni da più fonti.

la libreria utilizza una catena di responsabilità per popolare istanze di oggetti che conterranno i valori delle impostazioni. Di seguito, un esempio di utilizzo

[Settings]
public class FooSettings
{
    [Config(Key = "Foo", Required = false)]
    public string Foo { get; set; }
}
...
//Main, Global.asax, etc
SettingsFactory.SetDataSource(new AppConfigSource()); //type: IDataSource
//Usage
var fooSettings = SettingsFactory.GetSettings<FooSettings>();

la catena è questa

ISerializer serializer = new ComplexSerializer(//deserialize [Settings]
    new RequiredSerializer( //throws if a required prop cannot be found
        new ValueTypeSerializer(
            new ReferenceTypeSerializer())));
foreach(var propertyInfo in properties)
{
    // the serializer will query the type of the propertyInfo and deserialize to the proper type
    propertyInfo.SetValue(_instance, serializer.Deserialize(propertyInfo, value);
}

l'interfaccia IDataSource , che ha un unico metodo che restituisce una stringa basata su un parametro chiave, può essere facilmente utilizzata per un decoratore che può memorizzare nella cache i valori di configurazione senza raggiungere l'origine dati effettiva, mentre l'interfaccia ISerializer è nascosto nella mia applicazione manca tale capacità dall'esterno.

Potrei aggiungere alcuni booleazi statici qua e là per utilizzare alcuni metodi di memorizzazione nella cache comuni, ma questo danneggerà il design.

Qualche suggerimento per aggiungere un punto di estensione a questa catena? Il SettingsFactory sopra più gli attributi sono gli unici tipi esportati dall'assembly.

    
posta fra9001 18.07.2018 - 16:31
fonte

0 risposte

Leggi altre domande sui tag