Personalizzazione della configurazione con Iniezione delle dipendenze

2

Sto progettando una piccola libreria di infrastruttura applicativa, con l'obiettivo di semplificare lo sviluppo di applicazioni basate su ASP.NET MVC. L'obiettivo principale è applicare la convenzione sulla configurazione.

Hovewer, voglio ancora rendere alcune parti "configurabili" dagli sviluppatori.

Sono propenso per il seguente progetto:

public interface IConfiguration
{
    SomeType SomeValue;
}

// this one won't get registered in container
protected class DefaultConfiguration : IConfiguration
{
    public SomeType SomeValue { get { return SomeType.Default; } }
}

// declared inside 3rd party library, will get registered in container
protected class CustomConfiguration : IConfiguration
{
    public SomeType SomeValue  { get { return SomeType.Custom; } }
}

E la classe "service":

public class Service
{
    private IConfiguration conf = new DefaultConfiguration();

    // optional dependency, if found, will be set to CustomConfiguration by DI container
    public IConfiguration Conf { get { return conf; } set { conf = value; } }

    public void Configure()
    {
        DoSomethingWith( Conf );
    }
}

Lì, la parte "configurazione" è chiaramente una dipendenza della classe di servizio, ma si tratta di un "uso eccessivo" di DI?

    
posta mathieu 13.06.2011 - 17:52
fonte

1 risposta

1

Normalmente i framework DI fanno qualcosa come container.GetInstance<T>() per ottenere un'istanza del tipo T . Questo non richiede che ogni nuovo tipo abbia una modifica del codice alla classe di configurazione. Quindi puoi impostarlo come container.Configure(x => x.For<T>().Use(() => default(T))) o qualsiasi altra cosa abbia senso.

Ora dove il potere inizia a brillare davvero è quando hai ...

public class Service
{
  public Service(IConfigurationObject config)
  {
    _config = config;
  }
  readonly IConfigurationObject _config;
}

E il contenitore riempie automaticamente il costruttore con la dipendenza. Comincerei a capire un contenitore prima di scavare troppo profondamente in questo. Il link è un buon punto di partenza come tutti gli altri.

    
risposta data 26.08.2011 - 17:56
fonte

Leggi altre domande sui tag