2012-04-24 68 views
1

我试图使用Ninject将依赖注入添加到Nlog以进行单元测试,但我无法使其工作。 :( 调用GetCurrentClassLogger()。 当我是新来的都NLOG和Ninject我得到一个NullReferenceException,其实这是我第一次使用它们。使用Ninject将依赖注入添加到Nlog

主要

using NLog; 
using Ninject; 
using Ninject.Extensions.Logging; 
using Ninject.Extensions.Logging.NLog2; 
public class Program 
{ 
    static void Main(string[] args) 
    { 
     var kernel = new StandardKernel(new NLogModule()); 
     var logFactory = kernel.Get<ILoggerFactory>(); 
     var run = new MyClass(logFactory); 
    } 
} 

MyClass的

using Ninject.Extensions.Logging; 
public class MyClass 
{ 
    private readonly ILogger _log; 

    public MyClass(ILoggerFactory logFactory) 
    { 
     _log = logFactory.GetCurrentClassLogger(); 
    } 

    public void DoWork() 
    { 
     _log.Info("Doing work!"); 
    } 
} 

希望有人能帮助我。

回答

1

这就是我最终解决问题的方法。感谢ClausJørgensen帮助我在IRC上:)

显然当使用NLog扩展时会有一些自动绑定,所以做new StandardKernel(new NLogModule());会导致模块被加载两次。

主要

using Ninject; 
public class Program 
{ 
    static void Main(string[] args) 
    { 
     var kernel = new StandardKernel(); 
     var run = kernel.Get<MyClass>(); 
     run.DoWork(); 
    } 
} 

希望这可以帮助别人。