1

単体テストの目的でNinjectを使用して依存性注入をNlogに追加しようとしていますが、機能させることができません。:( GetCurrentClassLogger()を呼び出すとNullReferenceExceptionが発生します。NlogとNinjectの両方を初めて使用しますが、実際にこれらを使用するのはこれが初めてです。

主要

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);
    }
}

私のクラス

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!");
    }
}

誰かが私を助けてくれることを願っています。

4

1 に答える 1

1

これが私がそれを解決することになった方法です。IRCで私を助けてくれたClausJørgensenに感謝します:)

どうやら、NLog拡張機能を使用する場合、自動バインディングが設定されているためnew StandardKernel(new NLogModule());、モジュールが2回ロードされることになります。

主要

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

これが誰かを助けることを願っています。

于 2012-04-25T09:25:11.570 に答える