2009-10-07 4 views
0

내 asp.net 응용 프로그램에서 DI 용 Ninject를 사용하고 있으므로 전역 클래스는 NinjectHttpApplication에서 상속받습니다.global.asax에서 Ninject NLogModule Logger 사용

내 CreateKernel()에서 맞춤 모듈을 만들고 DI가 정상적으로 작동합니다.

그러나 NinjectHttpApplication 클래스에 Logger 속성이 있다는 것을 알고 있으므로 예외가 잡힐 때마다 Application_Error에서이 속성을 사용하려고합니다.

Ninject에 대해 nlog 모듈을 올바르게 만들고 있다고 생각하지만 내 로거는 항상 null입니다. 내 CreateKernel은 다음과 같습니다.

protected override Ninject.Core.IKernel CreateKernel() 
{ 
    IKernel kernel = new StandardKernel(new NLogModule(), new NinjectRepositoryModule()); 
    return kernel; 
} 

그러나 다음 메소드에서 Logger는 항상 null입니다.

protected void Application_Error(object sender, EventArgs e) 
{ 
    Exception lastException = Server.GetLastError().GetBaseException(); 
    Logger.Error(lastException, "An exception was caught in Global.asax"); 
} 

명확히하기 위해, 로거 유형 ILogger입니다의 NinjectHttpApplication의 속성이며, [주사하고는]

모든 아이디어를 어떻게 로거에 제대로 주입 특성을했다?

+0

CreateKernel() 대신 Load()를 재정의해야합니까? –

답변

0

실제로 NLogModule에 ILogger를 연결하고 있습니까? 그렇지 않다면 Ninject는 구현 된 NinjectHttpApplication 클래스의 Logger를 사용할 때 무엇을 사용해야할지 모를 것입니다.

나는 당신의 NLogModule에 무엇이 있는지 확인할 것이고, 나는 또한 당신의 질문에 그것을 두는 것이 좋습니다. 나는 그것이 당신의 문제를 해결하는 데 도움이 될 것이라고 생각합니다.

+0

NLogModule은 클래스가 아니며 Ninject와 함께 다운로드 한 파일이며 Ninject.Integration.NLog.Infrastructure.NLogModule입니다 Reflector로 분해하면 LogManager.GetLogger를 사용하여 비즈니스를 수행하는 것처럼 보입니다 –

+0

@ Ciaran 재미 있어요. 내가 어딘가에 당신이 여러 로그 (NLog, Log4net 그냥 부부 이름을 지정) 수 있기 때문에 사용하려는 ILogger를 지정해야합니다. 기본 설정이 있는지 확실하지 않지만 null이 반환되면 기본값이 없음을 나타냅니다. 나는 명시 적으로 ILogger의 일부 유형을 등록하고 그 도움이되는지 확인하고 놀 것입니다. – Joseph

+0

내 모듈에서 ILogger 바인딩을 시도했습니다 : Bind () .To (). 사용 (); 하지만 여전히 작동하지 않습니다. 평소와 같이 NLog logger를 생성하면 어렵지 않습니다! –

1

Download 최신 버전의 GitHub. 로깅이 제거되었습니다. 주입 된 로거를 보지 못하는 이유는 Ninject가 HttpApplication 클래스를 생성하지 않기 때문에 삽입하는 것을 모르기 때문에 수동으로 할당해야합니다. Ninject는 커널에 의해 활성화 된 구성 요소 만 초기화 할 수 있습니다.