2012-10-30 4 views
0

내가 WCF의 확장 파일과 (모든 nuget에서) 웹 확장자 나는 WCF 서비스 (에 Ninject에 사용하고Ninject에와 InRequestScope

와 Ninject에 3.01.1.10을 사용하고는 여러 클라이언트를 가지고 데스크톱 응용 프로그램).

저는 EF를 사용하기 때문에 서비스 요청이있을 때마다 (EF 우수 사례가 지시하는대로) 각 저장소가 만들어 지도록 InRequestScope를 사용하고 싶습니다.

Nugject를 통해 모든 것을 설치했으며 NinjectWCF 샘플이 보여 주듯이 RegisterServices에 서비스를 등록하는 NinjectWebCommon 부트 스트 래퍼 클래스를 가지고 있습니다. 나는 또한 어딘가 온라인으로 읽을 때 InstanceContextMode.PerCall에 WCF 서비스를 가지고있다.

내 질문은 : 삽입 된 개체의 모든 사슬이 InRequestScope에 있어야만 유효 범위가 작동합니까?

내 WCF 서비스가 생성자에 ServiceHandlerDispatcher 주입되고 :

public VanillaService(IServiceHandlerDispatcher serviceHandlerDispatcher) { ... } 

이 ServiceHandlerDispatcher는 클라이언트 핸들러 요청에 따라 해당 ServiceHandler 객체의 사전을 갖고, 제어기 오브젝트를 호출한다. 이 컨트롤러 객체에는 리포지토리를 사용하는 메소드가 있습니다.

public ServiceHandlerDispatcher(IMessageHandler[] messageHandlers) { ... } 

public SaveSubmissionHandler(SubmissionController submissionController) { ... } 

public SubmissionController(IRepository<Submission> submissionRepository) { ... } 

그래서 체인은 다음과 같이이다 : 서비스 -> ServiceHandlerDispatcher -> ServiceHandler -> 컨트롤러 -> 저장소 -> DB

성능과 메모리 목적

, 나는 ServiceHandlerDispatcher과 싱글의 모든 ServiceHandler를 원했다 범위이지만 InRequestScope의 저장소 개체 (각 호출에서 EF의 DbContext가 삭제되도록 함). 수십 개의 ServiceHandler 객체를 가질 수 있으므로

다시 서비스 -> ServiceHandlerDispatcher (SingletonScope) -> ServiceHandler (SingletonScope) -> 컨트롤러 (없음) -> 저장소 (InRequestScope가) -> DB

이 가능 아니면 커널이 생성이해야합니까 각 호출의 각 ServiceHandler? 체인의 모든 객체가 InRequestScope 일 필요가있는 경우 ServiceHandler 사전을 구현하는 방법은 무엇입니까? 공장 확장?

답변

1

이렇게 할 수 없습니다. 체인의 첫 번째 항목이 다른 항목 (이 경우 SingletonScope)보다 큰 범위에있는 경우 체인의 다른 항목도 해당 범위를 갖습니다.

관련 문제