Come registrare più implementazioni della stessa interfaccia in Asp.Net Core?

Ho servizi derivati ​​dalla stessa interfaccia

public interface IService { } public class ServiceA : IService { } public class ServiceB : IService { } public class ServiceC : IService { } 

In genere, altri contenitori IOC come Unity consentono di registrare le implementazioni concrete con una Key che li distingue.

In Asp.Net Core come registrare questi servizi e risolverlo in fase di esecuzione in base a qualche chiave?

Non vedo nessuno dei metodi Add Service che prenda il parametro key o name che in genere è utilizzato per distinguere l’implementazione concreta.

  public void ConfigureServices(IServiceCollection services) { // How do I register services here of the same interface } public MyController:Controller { public void DoSomeThing(string key) { // How do get service based on key } } 

Il modello Factory è l’unica opzione qui?

    Update1
    Ho seguito l’articolo qui che mostra come usare il modello di fabbrica per ottenere istanze di servizio quando abbiamo più implementazioni di concreazione. Tuttavia non è ancora la soluzione completa. quando chiamo il metodo _serviceProvider.GetService() non posso inserire dati nel costruttore. Ad esempio, considera questo esempio

     public class ServiceA : IService { private string _efConnectionString; ServiceA(string efconnectionString) { _efConnecttionString = efConnectionString; } } public class ServiceB : IService { private string _mongoConnectionString; public ServiceB(string mongoConnectionString) { _mongoConnectionString = mongoConnectionString; } } public class ServiceC : IService { private string _someOtherConnectionString public ServiceC(string someOtherConnectionString) { _someOtherConnectionString = someOtherConnectionString; } } 

    In che modo _serviceProvider.GetService() iniettare una stringa di connessione appropriata? In Unity o in qualsiasi altro IOC possiamo farlo al momento della registrazione del tipo. Posso usare IOption, tuttavia, che mi imporrà di iniettare tutte le impostazioni, non posso iniettare un particolare connectiontring nel servizio.

    Si noti inoltre che sto cercando di evitare l’uso di altri contenitori (incluso Unity) perché in questo caso devo registrare tutto il resto (ad esempio i controller) con il nuovo contenitore.

    Anche l’uso di pattern di fabbrica per creare un’istanza di servizio è contro DIP poiché factory aumenta il numero di dipendenze che un client è costretto a dipendere dai dettagli qui

    Quindi penso che il DI predefinito nel core ASP.NET manchi 2 cose
    1> Registrare le istanze utilizzando la chiave
    2> Iniettare dati statici nel costruttore durante la registrazione