2012-10-22 2 views
0

저는 Unity Application 블록을 간단한 서비스 위치 지정자로 사용하고 있습니다. 다음과 같이구현 유형을 알지 못하고 Unity 프레임 워크에서 ContainerRegistration을 다시 등록합니다.

나는 간단한 객체를 등록 해요 :

_serviceContainer.RegisterType<ISessionManager, SessionManager>(); 

내가 그런 식으로 내가 가지고 있지 않은 인터페이스 구현에만 ISessionManager을 지정하여 내 응용 프로그램에서 다른 장소에서 다시 등록하는 등록 싶습니다 내 응용 프로그램에 논리가 확산되었습니다.

+0

하지만 ISessionManager를 상속받은 객체를 보유하고 있습니까? –

답변

1

서비스 로케이터로 Unity를 남용해서는 안됩니다. ServiceLocator is considered an anti-pattern in modern software architecture.

응용 프로그램의 여러 위치에 매핑을 등록하지 마십시오. 종속성 컨테이너를 연결하고 응용 프로그램의 기본 객체를 해결하는 응용 프로그램에는 단일 Composition Root이 있어야합니다. 컨테이너가 컴포지션 루트 외부의 응용 프로그램 코드에 나타나서는 안됩니다. 당신이 당신의 아키텍처 방식을 유지를 주장하는 경우

은입니다

_serviceContainer.RegisterInstance<ISessionManager>(mySessionManagerObject); 

등록을 덮어 쓰기합니다. 그러나 응용 프로그램의 런타임 중에 해당 종속성을 다시 등록하면 응용 프로그램의 다른 부분에 영향을 줄 수 있습니다.

관련 문제