0

asp.net アプリケーションで DI に Ninject を使用しているため、グローバル クラスは NinjectHttpApplication から継承します。

私の CreateKernel() では、カスタム モジュールを作成しており、DI は正常に機能しています。

しかし、NinjectHttpApplication クラスに Logger プロパティがあることに気がついたので、例外がキャッチされないときはいつでも Application_Error でこれを使用しようとしています。

Ninject 用に nlog モジュールを正しく作成していると思いますが、ロガーは常に null です。これが私のCreateKernelです:

protected override Ninject.Core.IKernel CreateKernel()
{
    IKernel kernel = new StandardKernel(new NLogModule(), new NinjectRepositoryModule());
    return kernel;
}

ただし、次のメソッドでは、Logger は常に null です。

protected void Application_Error(object sender, EventArgs e) 
{
    Exception lastException = Server.GetLastError().GetBaseException();
    Logger.Error(lastException, "An exception was caught in Global.asax");
}

明確にするために、Logger は ILogger タイプの NinjectHttpApplication のプロパティであり、[Inject] 属性を持ちます

Loggerに正しく注入する方法はありますか?

4

2 に答える 2

1

GitHubから最新バージョンをダウンロードします。ロギングが削除されました。ロガーが挿入されていない理由は、NinjectがHttpApplicationクラスを作成していないため、挿入するかどうかわからないため、手動で割り当てる必要があります。Ninjectは、カーネルによってアクティブ化されたコンポーネントのみを初期化できます。

于 2010-05-12T14:24:43.233 に答える
0

NLogModule で ILogger を実際に配線していますか? そうでない場合、実装された NinjectHttpApplication クラスの Logger を使用するときに、Ninject はおそらく何を使用すればよいかわかりません。

あなたの NLogModule の内容を確認し、質問に入れることもお勧めします。あなたの問題を解決するのに役立つかもしれないと思います。

于 2009-10-07T16:07:26.377 に答える