2011-09-28 5 views
5

나는 이것이 "Ninject에 의해 인스턴스화되었을 때"라고 가정하고 있기 때문에 어리석은 질문이라고 확신합니다 ... 그러나 체크를 다시하고 싶습니다 ...Ninject의 OnActivation은 언제 시작됩니까?

왜 내가 질문을 묻는 오전, 나는 NinjectHttpApplication을 구현 asp mvc app 있습니다. 그러나 OnApplicationStarted 오버라이드 내에서 Ninject 내에서 바인딩 된 싱글 톤 인스턴스의 메서드를 활성화해야합니다.

문제는 커널이 노출되었지만 서비스 검색 자로 사용되어서는 안되므로 객체를 다시 가져 와서 DoSomeSetup()을 호출 할 수 있습니다. 방법, 그러나 그것은 실패 같이 보인다. 내 지식에 NinjectHttpApplication 인스턴스는 Global.asax 파일이 직접 사용하므로 DI가 아니므로 DI를 응용 프로그램에 그대로 적용 할 수 없습니다.

이렇게하면 OnActivation (x => x.DoSomeSetup())을 추가하는 다른 옵션이 하나 남겨집니다. 바인딩 개체를 호출하지만이 개체는 특정 위치에서만 사용되므로 페이지를 처음로드 할 때와 달리 컨트롤러에서 필요합니다. 따라서 OnActivation이 첫 번째 인스턴스가 만들어 질 때까지 대기하면 잠시.

는 희망 :) 너무 복잡하지 이잖아

답변

2

예 당신의 asumption이 올바른지 (또는 적어도 대부분 정확)입니다. 활성화 작업은 인스턴스가 Ninject (예 : 상수)로 생성되지 않아도 처음 실행될 때 실행됩니다.

HttpApplication의 경우 속성 삽입을 사용할 수 있습니다.

+0

NinjectHttpApplication에 속성 주입에 대한 간단한 예를 들어 주시겠습니까? 내가 너를 올바르게 이해하고 있는지 확인하기 위해서. – Grofit

+0

setter에 public 속성을 추가하고 [Inject] 특성을 추가합니다. –

관련 문제