J'ai des services qui sont dérivées à partir de la même interface
public interface IService { }
public class ServiceA : IService { }
public class ServiceB : IService { }
public class ServiceC : IService { }
Généralement d'autres conteneurs IOC comme Unity
vous permettent d'enregistrer des implémentations concrètes par certains Key
qui les distingue.
Dans Asp.Net Core comment puis-je m'inscrire à ces services et à résoudre lors de l'exécution basé sur certains points?
Je ne vois pas du tout de l' Add
méthode de Service prend key
ou name
paramètre généralement utilisé pour distinguer la mise en œuvre concrète.
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
}
}
Est le modèle de Fabrique de la seule option ici?
Update1
J'ai traversé l'article ici qui montre comment utiliser l'usine modèle pour obtenir des instances de service lorsque nous avons plusieurs concreate mise en œuvre. Cependant, il n'est pas encore complet. quand je l'appelle _serviceProvider.GetService()
méthode que je ne peut pas injecter des données dans le constructeur. Par exemple, considérons cet exemple
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;
}
}
Comment peut - _serviceProvider.GetService()
injecter de la chaîne de connexion appropriée?
Dans l'Unité ou de tout autre CIO, nous pouvons le faire au moment de l'inscription. Je peux utiliser IOption cependant qui va m'obliger à injecter tous les paramètres, je ne peut pas injecter un particulier connectionstring dans le service.
Notez également que je suis en train d'essayer d'éviter d'utiliser d'autres conteneurs (y compris l'Unité) car puis-je m'inscrire tout le reste ( par exemple, les Contrôleurs) avec un nouveau conteneur.
Aussi à l'aide de modèle de fabrique pour créer une instance de service est contre les TREMPER dans l'usine augmente le nombre de dépendances le client est obligé de dépendre de détails ici
Je pense donc que le défaut DI ASP.NET core manque 2 choses
1>Enregistrer instances à l'aide de la clé
2>Injecter des données statiques dans le constructeur lors de l'inscription