2012-06-09 2 views
0

ASP.Net MVC3 프로젝트에서 Ninject (3.0)를 사용하고 있습니다. 요청 처리 중 일부 지점에서 몇 가지 작업을 수행하려고합니다.MVC3 프로젝트의 Ninject 및 ChildKernel : "Ninject 구성 요소 ICache로드 오류"

요청 당 세션 패턴을 사용하고 있지만이 작업이 현재 요청과 동일한 세션을 공유하지 않도록하고 싶습니다. 그래서, 저는 ChildKernels이이 문제에 대해 저를 도울 수 있다고 생각했습니다. 나는 그와 함께 또 다른 아이 커널에서 ISession 바인딩을 만들려고하지만, 시작되었다 :

var child = new Ninject.Extensions.ChildKernel.ChildKernel(NinjectMVC3.Kernel); 
child.Dispose(); 

나는 내가 .Dispose()에서 내 요청 (하지의 말에 Error loading Ninject component ICache 예외 를 얻을 요청 중에 그런 식으로 코드를 실행하는 경우 요구). child.Dispose()을 제거하면 모든 문제가 해결됩니다.

그래서 ChildKernel과 함께 할 올바른 방법을 선택하고 있습니까? 자식 커널을 명시 적으로 처리하지 않고 사용하는 것이 안전합니까? 왜 자식 커널을 처리하면 요청이 끝날 때 Ninject가 throw 되는가?

답변

3

확장 모듈에서 모든 모듈을 하위 커널로로드하기 때문에 예외가 발생합니다. LoadExtensions = false로 커널을 생성하면이 문제가 해결됩니다. 그러나 이것은 귀하의 경우에 대한 해결책이 아닙니다.

ChildKernel의 의도는 실제 적용 범위가 다릅니다. 해당 하위 커널의 작업을 위해 모든 것을 등록해야합니다. 세션만으로는 충분하지 않습니다. 세션에 대한 조건부 바인딩 만 추가하는 것이 훨씬 더 좋습니다.

+0

감사합니다. Unity에서 ChildContainer에 익숙해 져서 ChildKernel을 같은 방법으로 사용하는 방법에 대해 생각했습니다. ChildContainer가 조금 더 투명하게 느껴지면 조건부 바인딩에 익숙해 지도록 노력할 것입니다. :) – Shaddix