15

Ninject の学習を始めたばかりですが、ロガーで問題が発生しました。私は現在、次のようにサービスとロガーがコンストラクターに注入されたコントローラーを持っています。

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

問題は、間違ったロガーを使用しているように見えるコンストラクターの logger.Info 行 (たとえば) にあるため、出力されるロガー名が正しくありません。

Tools.IGeocodeImporter: ToolsController Created 

以下は、ロガー名を取得するためのセットアップ方法です。

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

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

4

4 に答える 4

19

私は以下を使用します:

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

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

于 2012-12-06T17:06:36.150 に答える
9

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

于 2012-12-19T07:28:30.163 に答える