0

IOC 통합 프레임 워크를 시작하기 시작했습니다. MSDN에서 몇 편의 기사와 비디오를 읽었습니다. 나는이 일치가 어떻게 작동하는지 잘 알고있다.싱글 톤 유니티 컨테이너

1. 컨테이너를 만듭니다.
2. 인터페이스/클래스를 등록하십시오.
3. 클래스를 다시 작성하십시오.

각 프로젝트마다 1,2 단계를 추상화해야한다고 생각합니다. 컨테이너와 레지스터 인터페이스/클래스를 생성하는 싱글 톤 클래스를 작성하여 전체 프로젝트에서 통합 컨테이너를 사용할 수 있도록하는 것이 좋습니다. 제발 조언.

+0

어떤 유형의 응용 프로그램을 제작하고 있습니까? 상태 유지 (WindowsService, WinForms, WPF) 또는 상태 비 저장 (Web, WCF)? –

+0

데스크톱 WPF 응용 프로그램입니다. – Naga

+0

이 질문은 잘못된 전제에 근거한 올바른 결론을 제시합니다. 하나의 용기를 갖는 것이 좋습니다. 컨테이너를 전체 프로젝트에서 "사용 가능하게"하는 것은 정말 안좋은 일입니다. 후자는 컨테이너를 [Service Locator] (http://blog.ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern/)로 사용하는 것을 허용합니다. 가능한 한 피해야합니다. – rsenna

답변

0

아주 드문 경우를 제외하고는 전체 애플리케이션 (앱 도메인)에 대해 하나의 컨테이너 인스턴스가 항상 있어야합니다. DI 컨테이너는 스레드로부터 안전하며 해당 시나리오에 최적화되어 있습니다. 여러 개의 컨테이너가 있으면 성능 문제가 발생할 수 있으며 유지 관리 문제가 발생할 수 있습니다. 예를 들어 응용 프로그램 범위 개체와 같이 일부 시나리오는 매우 어렵 기 때문입니다.

0

싱글 톤을 사용하십시오.

  • 은 (등록 및 해결 등의) 가장 중요한 기능은
  • 은 Web.config의에서 구성을 취를 노출
    • 코스 싱글이다 : 나의 현재 회사에서 우리는 유니티 용기 주위에 싱글 래퍼를 사용하는 /app.config
    • 뿐만 아니라 해결하는 동안 (예를 들어, 단위 테스트에 대한) 런타임
    • 예기치 않은 오류의 경우 기본 처리를위한 기능을 가지고에 공급 될 수

    그것은 매력처럼 작동하며 중요한 일에 집중하기 쉽습니다.

  • 0

    싱글 톤을 사용하지 마십시오. 그것은 당신이 잘 알려진 DI 반 패턴 인 곳곳에서 해결하도록 부탁합니다.

    대신, 컨테이너를 사용하여 개체 그래프를 확인하고 거기에서 이동하는 앱에서 단일 지점 (데스크톱 앱의 기본 기능, 웹 앱의 앱 시작 기능)을 지정하십시오.

    자세한 내용은 Mark Seeman's discussion of "Composition Root"을 참조하십시오.