2013-02-22 2 views
3

У меня есть простое консольное приложение, использующее Ninject, Ninject.Logging и Ninject.Extensions.NLog2. Все они строятся с помощью последних пакетов nuget.Исключение Null Reference с использованием Ninject с Ninject.Extensions.Nlog2

My App делает следующее

_kernel = new StandardKernel(); 
ILogger logger = _kernel.Get<ILogger>(); 

И я получаю Null Reference исключение из в StandardKernel при вызове Get<ILogger>()

System.NullReferenceException was unhandled by user code 
    HResult=-2147467261 
    Message=Object reference not set to an instance of an object.  
    Source=Ninject.Extensions.Logging 
    StackTrace: 
     at Ninject.Extensions.Logging.LoggerFactoryBase.GetLogger(IContext context) in  c:\Projects\Ninject\ninject.extensions.logging\src\Ninject.Extensions.Logging\LoggerFactoryBase.cs:line 61 
    at Ninject.Extensions.Logging.LoggerModuleBase.<Load>b__0(IContext context) in c:\Projects\Ninject\ninject.extensions.logging\src\Ninject.Extensions.Logging\LoggerModuleBase.cs:line 26 
    at Ninject.Activation.Providers.CallbackProvider`1.CreateInstance(IContext context) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\CallbackProvider.cs:line 45 
    at Ninject.Activation.Provider`1.Create(IContext context) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Provider.cs:line 38 
    at Ninject.Activation.Context.Resolve() in c:\Projects\Ninject\ninject\src\Ninject\Activation\Context.cs:line 157 
    at Ninject.KernelBase.<>c__DisplayClass10.<Resolve>b__c(IBinding binding) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs:line 386 
    at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() 
    at System.Linq.Enumerable.<CastIterator>d__b1`1.MoveNext() 
    at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source) 
    at Ninject.ResolutionExtensions.Get[T](IResolutionRoot root, IParameter[] parameters) in c:\Projects\Ninject\ninject\src\Ninject\Syntax\ResolutionExtensions.cs:line 37 

Есть больше конфигурации мне нужно пойти, чтобы получить вход работает?

ответ

5

Вы не должны прямо попросить ILogger (хотя сообщение об ошибке может быть немного лучше), но вы должны разрешить ILoggerFactory и от того, вы можете попросить ILogger

_kernel = new StandardKernel(); 
ILoggerFactory loggerFactory = _kernel.Get<ILoggerFactory>(); 
ILogger logger = loggerFactory.GetCurrentClassLogger(); 

Смотрите также документации Request a logger yourself раздел.

Смежные вопросы