2010-02-27 3 views
3

Официально выпущенный Ninject 2 уже не содержит ссылки на специфичные для WebForms функции для IoC для WebForms, MasterPages и т. Д. Теперь он разделен на плагины/расширения; который в этом случае является расширением http://github.com/idavis/ninject.web. Моя проблема, однако, в том, что существует зависимость от log4net (или NLog), и я не могу найти никакой документации о том, как ее настроить для интеграции с моей текущей конфигурацией log4net или вообще удалить ее (то есть установить регистрацию в null, чтобы я не делал По-видимому, есть две конфигурации log4net).Ninject 2, logging и WebForms

http://markmail.org/message/7iv7nltanz6ve4ga#query:Error%20activating%20ILoggerFactory%20ninject.web+page:1+mid:6o4q6ee2js2k4gfp+state:results ссылки на другие темы с той же проблемой, но опять же, нет реальной документации о том, что с ней делать. Я просмотрел источник всего этого и, должно быть, пропустил что-то очевидное.

Может ли кто-нибудь указать мне в правильном направлении, чтобы наилучшим образом справиться с этим, поэтому я все еще могу легко интегрировать Ninject с WebForms, но не иметь посторонних сервисов ведения журнала? Или не беспокоиться о чем-то вроде следующего на Global.asax:

protected override IKernel CreateKernel() 
    { 
     IKernel kernel = 
     new StandardKernel(new SomeMyModule(), new Log4netModule()); 
     return kernel; 
    } 

Я сейчас kickstarting мою конфигурацию log4net в global.asax через

private readonly static ILog Log = LogManager.GetLogger(typeof(Global));: 
+0

Похоже, что ninject нуждается в NullLogger? Вы пробовали * не * добавлять какой-либо модуль регистрации? –

+0

Просто небольшая точка, вы упоминаете «kickstarting» log4net - вы знаете, что эта строка просто говорит «дайте мне один для меня», а не «Мы будем использовать вход в систему здесь» (вы сомневаетесь, чтобы убедиться) http://stackoverflow.com/questions/1261158/log4net-initialisation –

+0

Mauricio - да, приводит к исключению «no ILogger». Это имеет смысл, потому что NullLogger для Ninject отсутствует. Рубен - да, я знаю. log4net требует, чтобы LogManager.GetLogger был а) вызван в той же сборке, где находится конфигурация log4net (которая как можно скорее исключает другую сборку, к которой принадлежит мой модуль ошибок) и b). Призыв к нему, где я делаю так, выполняет оба. – Ted

ответ

3

Хотя Ninject.Web обладает свойствами ILogger, он ничего не записывает.

Если вы хотите полностью отключить Ninject.Extensions.Logging, создайте и привяжите реализацию ILoggerFactory, которая возвращает null из всех методов.

Или если вы хотите включить его с помощью log4net, выберите Ninject.Extensions.Logging от ninject.org и обратитесь к Ninject.Extensions.Logging.Log4net из вашего проекта. Он будет автоматически загружен Ninject 2.0.

Если вы строите Ninject.Web от источника, вы можете удалить расширение журналирования:

  • уронить ссылку на эту сборку
  • удалить элемент ILogger из 5 классов, которые имеют это
+0

«Он будет автоматически загружен Ninject 2.0» - это волшебные слова, поскольку он использует мою уже существующую конфигурацию log4net. – Ted