Использование Ninject NLogModule Logger в global.asax - PullRequest
0 голосов
/ 07 октября 2009

Я использую Ninject для DI в своем приложении asp.net, поэтому мой класс Global наследуется от NinjectHttpApplication.

В моем CreateKernel () я создаю свои собственные модули, и DI работает нормально для меня.

Однако я заметил, что в классе NinjectHttpApplication есть свойство Logger, поэтому я пытаюсь использовать его в Application_Error всякий раз, когда исключение не перехватывается.

Я думаю, что я правильно создаю модуль nlog для Ninject, но мой логгер всегда нулевой. Вот мой CreateKernel:

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

Но в следующем методе Logger всегда равен нулю.

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

Для пояснения, Logger является свойством для NinjectHttpApplication типа ILogger и имеет атрибут [Inject]

Есть идеи, как правильно вводить в Logger?

Ответы [ 2 ]

1 голос
/ 12 мая 2010

Скачать последнюю версию с GitHub. Регистрация была удалена. Причина, по которой вы не видите введенный регистратор, состоит в том, что Ninject не создает класс HttpApplication, поэтому он не знает, чтобы внедрить его, вы должны назначить его вручную. Ninject может инициализировать только компоненты, активированные ядром.

0 голосов
/ 07 октября 2009

Вы действительно подключаете ILogger в своем NLogModule? Если нет, то Ninject, вероятно, не будет знать, что использовать, когда вы используете Logger реализованного класса NinjectHttpApplication.

Я бы проверил, что находится в вашем NLogModule, и я бы также предложил добавить его в ваш вопрос. Я думаю, что это может помочь нам решить вашу проблему.

...