2009-12-02 2 views
5

더 적은 것을 빨아들이는 나의 영원한 탐구에서 나는 현재 IOC 더러운 일을하기 위해 mvc Turbine을 조사하고있다.
난 mvc Turbine 괴상한 저녁 식사 예제를 사용하고 있는데, 논리적으로 보입니다. 나는 그것이 어떤 독서와 희귀 한 팟 캐스트에 대한 안전 패턴 일반적인 뭔가 뒤에 내가 철학을 추측하고있어, 여기에 터빈 프로젝트에 다스 려하고 있습니다 만, 나는 IOC의 개념에 새로운 오전과 나는 몇 가지 질문이 있습니다.IoC 패턴으로 연결 고리와 같은 것을 보관할 위치는 어디입니까?

public class UserRepositoryRegistration : IServiceRegistration 
{ 
    public void Register(IServiceLocator locator) 
    { 
     locator.Register<IUserRepository, UserRepository>(); 
    } 
} 

IUserRepository의 구체적인 구현하지만 몇 가지 구성이 필요합니다 :

지금까지 내가 예를 들어
을 등록 할 각 IRepository에 대한 IServiceRegistration 항목이있다. 연결 문자열 또는이 경우에는 사용할 db4o 파일의 경로와 같은 것입니다.

어디서 누가이 정보를 제공해야합니까? 일반적으로

답변

3

로버트 루카스는 모두 자신의 답변 머리에 못을했다. 계정의 모든 "여분의 물건"은 UserRepository 클래스 내에 있습니다. 이것은 현재 터빈 ND가 구현되는 방식입니다. 그러나

은 아무것도가 하드 코딩 또는 설정 파일에서 읽을 수 있는지 여부 (연결 문자열을 제공 할 것입니다 다음 UserRepository에 '주입'할 수 ConnectionStringProvider라는 새로운 클래스를 만드는에서 당신을 중지하지 않습니다.

을 다음과 같은 코드가 될 수 있습니다.

여기에서
public class ConnectionStringProvider { 
    public string ConnectionString { 
     get{ 
      // your impl here 
     } 
    } 
} 

public class UserRepository { 
    public UserRepository(ConnectionStringProvider provider){ 
     // set internal field here to use later 
     // with db connection 
    } 
} 

, 당신은 UserRepositoryRegistration 클래스 내에서 ConnectionStringProvider에 대한 등록을 추가하고 터빈 당신을 위해 나머지를 처리 ​​할

+0

감사합니다, 그건 좋은 솔루션의 IT 비록 마일. ght 처음에 overengeneering 것으로 보인다, 나는 현재 web.config 파일에 내 connectionstrings을 가지고 있지만 계획은 데이터베이스에있는 모든 우리의 applicatoins의 모든 구성을 가지고 응용 프로그램에게 해당 데이터베이스에 대한 참조 만 제공하고 있습니다. 그러면 구성 가능한 것들을 플러그 방식으로 선호합니다. –

+0

답변 해 주셔서 감사합니다. 희망을 머뭇 거리며 즐기세요. –

2

, 이것은 전적으로 연결 문자열 또는 데이터베이스 경로를 필요로하는 콘크리트 UserRepository의 관심사입니다. 응용 프로그램 구성 파일에 경로를 삭제하고 구체적인 저장소에서 구성 데이터를 직접 가져 오는 것이 좋습니다.

모든 저장소는 처음부터 추상화를 가지고있는 이유 중 하나입니다이 정보를 필요로가는 것은 아닙니다. 예를 들어, 빠른 메모리 IUserRepository는 데이터베이스에 대한 경로를 요구하지 않거나 추가 구성이 작동 할 가능성이 높습니다. 로버트 유사

1

, 나는 각 주입 유형에 대한 특정 항목으로, 그러나, 응용 프로그램 구성 파일에 이러는 추천 할 것입니다. 이렇게하면 연결 문자열이나 경로를 각 주입마다 사용자 정의 할 수 있습니다.

관련 문제