2012-11-16 6 views
0

여러 클라이언트에 대한 응용 프로그램을 작성 중이므로 각 클라이언트의 구현간에 유사점과 차이점이 있습니다. ORM에 UI 및 Entity Framework 용 Win Forms 및 WPF를 혼합하여 사용하고 있습니다. 가능한 한 공유 구성 요소를 재사용 할 수있는 능력이 필요합니다.여러 클라이언트에 대해 여러 프로젝트에 접근하기

핵심 문제 중 하나는 한 클라이언트의 데이터베이스가 Oracle이고 다른 하나는 MS Sql입니다. 이제는 두 데이터베이스 모두 작동하지만 컴파일 시점에 요소를 변경해야합니다. 즉, 데이터 프로젝트가 약간 다르지만 거의 동일한 프로젝트 두 세트가 있어야한다는 의미입니다. 한 UI에서 버그가 발견되면 다른 솔루션을 열고 거기에서 편집해야합니다.

나는 이전 프로젝트에서 Ninject를 사용했지만 직접 호출하는 UI가 아닌 UI에 특정 프로젝트/클래스를 주입하여 데이터 프로젝트의 제어를 어떻게 든 반전시킬 수는 있습니다.

내가 알아낼 수없는 문제는 전체 프로젝트를 주입하는 방법입니다. UI에서 db.Customers.ToList();라고 말하고 내가 주입 한 데이터 프로젝트에서 고객을 돌려 주길 원합니다. 두 클라이언트의 데이터베이스 모델은 현재 시점에서 동일하지만 향후 변경 될 수 있습니다.

공유 용량에서 이러한 리소스를 사용할 수있는 패턴이 있어야합니다.

감사합니다.

+0

클라이언트 프로젝트를 다른 솔루션으로 분할해서는 안됩니까? 클래스 라이브러리 (또는 라이브러리)에 클라이언트 관련 내용이없는 "핵심"솔루션을 만든 다음 클라이언트 솔루션을 만들고 해당 DLL을 참조하려고 했습니까? –

답변

0

어떤 시점에서 필요한 연결 유형을 결정할 수 있습니까?

이것은 매우 순진 할 수도 있지만 런타임에 적절한 유형의 연결 팩토리 또는 저장소를 시작하기 위해 앱 설정을 사용할 수 없습니까? 가장 간단한 버전 :

public class MainWindow : Window 
{ 
    private IRepository _repo; 

    public MainWindow() 
    { 
     _repo = ServiceLocator.GetRepo();  
    } 
} 


public class ServiceLocator 
{ 
    public static IRepository GetRepo() 
    { 
     var typeOfDb = AppSettings["TypeOfDb"] 

     if(typeOfDb == "Oracle") 
      return new OracleRepo(); 
     else 
      return new SqlServerRepo(); 
    } 
} 

이 방법이 가능합니까? 또는 나는 그 요점을 완전히 놓쳤는가?

관련 문제