2012-12-06 12 views
12

私はちょうどNinjectの学習を始めましたが、ロガーに問題が発生しました。私は現在、それほどのようにコンストラクタに注入サービスとロガーを持っているコントローラを持っている:問題は間違ったロガーを使用しているようだコンストラクタでlogger.Infoライン(例えば)であるNinject logger using NLog

public ToolsController(IToolsService toolsService, ILogger logger) 
{ 
    logger.Info("ToolsController Created"); 
    this.toolsService = toolsService; 
    this.logger = logger; 
} 

、それが出力するロガー名は間違っています。以下は

Tools.IGeocodeImporter: ToolsController Created 

ロガー名を取得するように設定されている方法です:

kernel.Bind<ILogger>().To<Logger>().WithConstructorArgument("name", x => x.Request.ParentContext.Request.Service.FullName); 

何かアドバイスをいただければ幸いです。

+0

あなたが期待しているだろうかロガーの名前を? –

+0

ロガーがどこにあるかのクラス名。 'ToolsController:ToolsController Created'の行に何かがあります – user1883004

答えて

14

私は次のようにします。

.Bind<ILog>().ToMethod(p => LogManager.GetLogger(
        p.Request.Target.Member.DeclaringType)); 

クラスの名前のロガーを持っているために。私はLog4netを使用していますが、アイデアはどのログにも適用できると思います。実際にメソッドにバインドすると、必要なインスタンスを作成するために任意のソリューションを開くことができます。

9

私はNuGetまたはGitHubにあるNinject.Extensions.Logging.NLog2という拡張子を使用します。これはNLogのバインドを処理するので、プロジェクトに追加するだけでなく、今持っているNLogへのバインディングを削除する以外に何もする必要はありません。

+0

このライブラリで利用できるチュートリアルがあるかどうか知っていますか? –

+0

このリンクをチェックしてくださいhttp://blog.tonysneed.com/2011/10/09/using-nlog-with-dependency-injection/ –

+0

ここに、拡張wiki https://github.com/ninject/へのリンクがありますninject.extensions.logging/wiki – jmdon

0

フェリーチェは、あなたが同じ方法を使用することができます述べたように、しかしNlogのためにあなたは、少しの変更が必要です。

.Bind<ILogger>().ToMethod(p => NLog.LogManager.GetCurrentClassLogger(
        p.Request.Target.Member.DeclaringType));