내가 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 사전을 구현하는 방법은 무엇입니까? 공장 확장?