2009-10-07 3 views
0

Я использую Ninject для DI в моем приложении asp.net, поэтому мой глобальный класс наследуется от NinjectHttpApplication.Использование Ninject NLogModule Logger в global.asax

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

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

Я думаю, что я правильно создаю модуль nlog для Ninject, но мой журнал всегда имеет значение 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"); 
} 

Чтобы уточнить, Logger это свойство на NinjectHttpApplication типа ILogger и имеет [Inject] атрибут

Любая идея, как правильно вводить в Logger?

+0

Не следует ли переопределять Load() вместо CreateKernel()? – 2010-10-14 22:37:07

ответ

0

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

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

+0

NLogModule не является моим классом, это тот, который я загрузил вместе с Ninject, и это тип Ninject.Integration.NLog.Infrastructure.NLogModule Когда я разбираю его с Reflector, похоже, что он делает бизнес с помощью LogManager.GetLogger –

+0

@ Ciaran Это интересно. Я готов где-то, что вам нужно указать, какой ILogger вы хотите использовать, поскольку это может быть несколько разных журналов (NLog, Log4net, чтобы назвать пару). Я не уверен, есть ли набор по умолчанию, но вы получаете нулевой ответ, кажется, указывает, что нет значения по умолчанию. Я бы поиграл с явным регистрацией некоторого типа ILogger и посмотрим, поможет ли это. – Joseph

+0

В моем собственном модуле я попытался привязать ILogger, используя: Bind () .T () .Using (); , но все еще не работает. Просто создайте журнал NLog обычным способом - это не должно быть так сложно! –

1

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