2010-12-29 6 views
0

3 계층 Windows 응용 프로그램에서 단일 구성이 포함 된 구성 파일을 어디에 배치합니까? 프론트 레이어에 있다면 IUnityContainer 인터페이스를 인식하는 프로젝트의 모든 프런트, 비즈니스 및 데이터 레이어 프로젝트에서 unity.dll을 참조해야합니까?어디서 Unity 구성 파일을 배치합니까?

구성 컨테이너는 어디에서로드합니까? 앞 레이어의 Main 메소드 또는 Data Layer에 있어야합니까? 그렇지 않으면 필요할 때 컨테이너를로드합니까?

모든 것이 전면 레이어에 배치 된 경우 전체 프로젝트가 전면 레이어에 종속되지 않으며 Windows 응용 프로그램에서 웹 응용 프로그램으로 전면 레이어를 변경하면 다시 통합 작업을 수행해야합니다!

+0

적어도 세 가지 질문이 있습니다. –

답변

8

Unity 또는 그와 관련된 다른 IoC 컨테이너는 응용 프로그램의 초기 부트 스트랩을 넘어 응용 프로그램에서 역할을 수행해서는 안됩니다. 그리고 그것은 비즈니스 및 데이터 계층으로 들어가서는 안됩니다.

따라서 Unity를 사용하여 Main에서 응용 프로그램을 부트 스트랩 한 다음 Unity가 완료되었습니다. Unity가 응용 프로그램의 다른 부분을 만지지 않도록하십시오.

다음은이 주제에 대한 설명입니다. How I use Inversion of Control containers 및 후속 조치 Pulling from the container입니다.

모든 것이 전면 레이어에 배치 된 경우 전체 프로젝트가 전면 레이어에 종속되지 않으며 Windows 응용 프로그램에서 웹 응용 프로그램으로 전면 레이어를 변경하면 다시 통합 작업을 수행해야합니다!

올바르게 설정 한 경우가 아닙니다. 응용 프로그램의 구성 요소를 해결하기 위해 Unity가 필요하지 않습니다. Unity 및 다른 IoC 컨테이너는 이러한 문제를 해결하는 데 매우 유용한 도구 일뿐입니다. Unity가 필요하지 않도록 먼저 응용 프로그램을 작성해야합니다. 그런 다음 Unity 또는 일부 다른 IoC 컨테이너를 쉽게 연결하여 응용 프로그램을 실행해야하는 구성 요소를 해결할 수 있습니다. 의존성 주입의

R

  • 출시
  • 등록 컨테이너 때 당신에게 설정되어

    1. 등록
    2. 해결합니다. 이는 응용 프로그램이 Main에서 시작될 때 발생합니다. Resolve는 응용 프로그램의 루트 구성 요소를 해결할 때 사용됩니다. 이것은 응용 프로그램의 핵심 구성 요소가 함께 작동하도록하는 것입니다. 릴리스는 응용 프로그램이 종료되고 구성 요소가 올바르게 해제 될 수 있도록 컨테이너를 처분하는 경우입니다. 컨테이너는 절대로 결코 절대로 응용 프로그램에 들어 가지 않습니다.

    +1

    이 완벽합니다. 좋은 대답. – InfoLearner

    +0

    죄송합니다. 내 데이터 레이어에서 사용하고있는 인스턴스를 등록하려고하지만 데이터 레이어가 unity.dll을 인식하지 못합니다. 프론트 레이어에 등록하면 프런트 레이어는 데이터 레이어의 클래스를 인식하지 못합니다. – InfoLearner

    +0

    @ fm55 : 당신의 데이터 계층은 NHibernate로부터'ISessionFactory'를 필요로한다고 가정 해 봅시다. 애플리케이션 루트가 'ISessionFactory'를 전달할 것으로 기대한다고 가정 해 보겠습니다. 따라서 컨테이너에'ISessionFactory'를 등록하십시오. 그런 다음 응용 프로그램 루트를 해결하면 응용 프로그램 루트가 먹고 데이터 영역으로 전달하는 'ISessionFactory'를 인스턴스화합니다. 응용 프로그램이 종료되면 컨테이너가 'ISessionFactory'를 해제합니다. – jason

    1

    모두 앞 레이어에서 유니티를 사용하는지, 아니면 중간/뒤 레이어에서만 유니티를 사용하는지에 따라 다릅니다. 백엔드에서만 Unity를 사용하는 경우 Unity 구성 파일을 백엔드 실행 파일과 동일한 디렉토리에 저장합니다. 프론트 엔드에서 Unity를 사용하고 있다면, 프론트 엔드가 백엔드와 독립적으로 실행 가능한 상태로 구성 파일의 두 번째 복사본이 필요할 수도 있습니다.

    부트 스트래핑 방법에서 Unity를 참조하는 것에 대한 Jason의 조언은 좋은 조언입니다. 따라서 구성 파일은 부트 스트래핑을 실행하는 서버 실행 파일 및/또는 실행되는 클라이언트 실행 파일의 디렉토리에서 동일한 디렉토리에 있어야합니다 부트 스트랩.

    우리가 현재 작업하고있는 시스템에서는 클라이언트와 서버 모두에서 동일한 부트 스트래핑 코드 (중간 계층 DLL에서)를 사용합니다. 두 가지 모두에서 IoC를 사용하기 때문입니다. 이는 클라이언트 EXE와 서버 EXE가 별도의 구성 사본을 필요로 함을 의미합니다.

    +0

    데이터 레이어에서 사용중인 인스턴스를 등록하려고하지만 데이터 레이어가 unity.dll을 인식하지 못합니다. 프론트 레이어에 등록하면 프런트 레이어는 데이터 레이어의 클래스를 인식하지 못합니다. 각 레이어에 하나씩 세 개의 설정 파일을 생성하고 인스턴스를 등록하는 것이 좋습니다 – InfoLearner

    관련 문제