Nous avons expérimenté StructureMap et je n'arrive pas à comprendre comment gérer des situations où une seule interface a plusieurs implémentations. Le code ci-dessous montre un exemple où deux bases de données sont accessibles à partir d'un même service.IOC avec plusieurs bases de données qui utilisent la même interface (StructureMap ou tout autre cadre DI)
public class SomeController : Controller
{
private ISomeService _service;
private IClientRepository _repository;
protected IContext _masterContext;
protected IContext _clientContext;
public SomeController(ISomeService service, ISomeRepository repository
, IContext masterCon, IContext clientCon)
{
_service = service;
_repository = repository;
_masterContext = masterCon;
_clientContext = clientCon;
}
}
public class SomeService : ISomeService
{
private IContext _masterContext;
private IContext _clientContext;
public SomeService(IContext masterContext, IContext clientContext)
{
masterContext = _masterContext;
clientContext = _clientContext;
}
}
public class ClientRepository : IClientRepository
{
private IContext _clientContext;
public ClientRepository(IContext clientContext)
{
_clientContext = clientContext;
}
}
public class MasterContext : IContext
{
public MasterContext(String connString)
//<snip, snip> implement 3rd party data context
}
public class ClientContext : IContext
{
public ClientContext(String connString)
//<snip, snip> implement 3rd party data context
}
StructureMap fonctionnait très bien quand nous avions un contexte unique (base de données), mais comment puis-je lui dire comment résoudre le 2e? Remarque: dans la plupart des cas, nous n'aurions pas de service gérant 2 bases de données (mais un contrôleur gérant 2 connexions, c'est-à-dire 2 référentiels accédant à 2 bases de données différentes), mais cela ne semble toujours pas simplifier.
Je suis à moitié prêt à abandonner l'utilisation d'un framework IoC et à revenir à DI de pauvre.
Je suis dans une situation similaire. J'ai donc déjà 3 injections différentes dans mon contrôleur et je suis sur le point d'en ajouter une 4ème et comme vous - je pense qu'il doit y avoir une solution à ce problème. L'ironie est que tous ont les méthodes de base: Add, Update, FindSingle, FindMany, Delete et SaveChanges sauf qu'ils appellent un contexte différent. Quelqu'un a des exemples? – ozzy432836