Potresti usare una fabbrica astratta, come questa:
public interface IRepository<T> { }
public interface IRepositoryFactory
{
IRepository<T> GetRepository<T>();
}
Questo lascia solo la domanda, qual è l'implementazione di IRepositoryFactory?
Stavo per descrivere Impianto di produzione tipizzato di Castle Windsor ma I Googled e nopCommerce utilizza un altro contenitore di iniezione delle dipendenze , autofac.
Non ho usato Autofac (il prossimo sulla mia lista) ma questi contenitori fanno essenzialmente la stessa cosa. Ecco un post stackoverflow che descrive la creazione di un abstract fabbrica con Autofac. La domanda sembra esattamente come il tuo scenario, e la prima risposta mostra una fabbrica che utilizza Autofac.
Se non l'hai già usato, mi dispiace, quello era un puntatore davvero maldestro per l'iniezione di dipendenza. Ma questo è esattamente il tipo di problema che affronta. Stai cercando di capire come creare la giusta classe per l'interfaccia giusta senza if / thens o switch. DI gestisce questo e altro.
Sono andato alla home page di Autofac e i campioni di codice proprio lì danno un'immagine davvero concisa di ciò che fa. Guarda solo i primi due. A sinistra mostra come gli dici quali classi usare per quali interfacce. Puoi nominarli uno alla volta o persino scansionare un assembly per le classi che implementano un'interfaccia.