2011-02-16 4 views
12

최근에 Ninject.Web.Mvc 확장자를 사용하여 Ninject을 시험해 보았습니다. 특히 혼란스럽지 않고 독특한 것을 발견했습니다. 다음과 같이 NinjectHttpApplication 추상 클래스에서Ninject 및 OnePerRequestModule

, 나는 여기에 디버거 중단 점을 배치 한

/// <summary> 
    /// Initializes a new instance of the <see cref="NinjectHttpApplication"/> class. 
    /// </summary> 
    protected NinjectHttpApplication() 
    { 
     this.onePerRequestModule = new OnePerRequestModule(); 
     this.onePerRequestModule.Init(this); 
    } 

.. 정의 된 생성자가있다, 이것은 몇 번 호출됩니다. 그것에 대한 실제 문서를 찾을 수 없습니다. 구현 코드에는 내 눈을 사로 잡는 선이 있습니다. 다음과 같이

  if (kernel.Settings.Get("ReleaseScopeAtRequestEnd", true)) 
      { 
       OnePerRequestModule.StartManaging(kernel); 
      } 

내 질문

  • OnePerRequestModule
  • 왜이 생성자가 호출되는 여러 번 무엇 ...인가?
  • 생성자가 여러 번 호출되는 경우이 StartManaging 메서드의 목적은 무엇입니까? OnePerRequestModule
+0

관련 : http://stackoverflow.com/questions/15778324/do-i-need-to-register-ninject-oneperrequestmodule-with-ninject-web-mvc-3-0/15786866# –

답변

13

커널의 Cache 각 HTTP 요청 완료시부터 InRequestScope() 차원 객체를 제거한다.

IIS가 여러 개를 생성하기 때문에 ctor는 복수 시간이라고합니다. 하나의 NinjectHttpApplication은 한 번에 하나의 요청 만 처리 할 수 ​​있습니다. 따라서 IIS는 스레드 당 하나의 인스턴스를 생성합니다.

StartManaging 모두 OnePerRequestModules은 요청이 종료 된 후 지정된 커널에서 InRequestScoped 개체를 해제한다고 알려줍니다.

+0

나는 그대로 두어도 괜찮습니까? 내가 걱정할 필요가있는 것이 아닌가? – Ciel

+0

@Ciel Doc는 현재 매우 명확해야합니다. http://stackoverflow.com/a/15786866/11635 및 https://github.com/ninject/Ninject.Web.Common/wiki/InRequestScope를 참조하십시오. –