2012-04-24 69 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(); 
    } 
} 

希望這可以幫助別人。