Мы экспериментировали со StructureMap, и у меня возникли проблемы с пониманием того, как справляться с ситуациями, когда один интерфейс имеет несколько реализаций. В приведенном ниже коде показан пример, в котором у нас есть две базы данных, обе из которых доступны из одной службы.
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 работал ОТЛИЧНО, когда у нас был один контекст (база данных), но как мне сказать ему, как разрешить второй? Примечание: в большинстве случаев у нас не будет службы, обрабатывающей 2 базы данных (но может быть контроллер, обрабатывающий 2 соединения, то есть 2 репозитория, обращающихся к 2 разным базам данных), но это все равно не упрощает задачу.
Я наполовину готов просто отказаться от использования инфраструктуры IoC и вернуться к DI для бедняков.