우리는 StructureMap을 실험 해본 결과 단일 인터페이스에 여러 구현이있는 상황을 처리하는 방법을 파악하는 데 어려움을 겪고 있습니다. 아래 코드는 단일 서비스에서 두 개의 데이터베이스에 액세스 할 수있는 예제를 보여줍니다. 우리는 하나의 컨텍스트 (데이터베이스)했을 때동일한 인터페이스 (StructureMap 또는 다른 DI 프레임 워크)를 사용하는 여러 데이터베이스가있는 IOC
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 개의 저장소가있는 2 개의 연결을 처리하는 컨트롤러가있을 수 있습니다.
저는 IOC 프레임 워크를 포기하고 가난한 사람의 DI로 돌아갈 준비가되어 있습니다.
나는 비슷한 상황에 처해있다. 그래서 저는 이미 3 개의 다른 repos가 제 컨트롤러에 주입되어 있고 저는 4 번째를 추가하려고합니다. 그리고 여러분을 좋아합니다 -이 문제에 대한 해결책이 있어야한다고 생각합니다. 아이러니 한 것은 모두 기본 : Add, Update, FindSingle, FindMany, Delete 및 SaveChanges 메소드가 다른 Context를 요구한다는 점입니다. 누구든지 예제가있어? – ozzy432836