0

独自の ILogger 実装を作成し、インスタンスを登録します

ResourceSpace.Uses.Resolver.AddDependencyInstance<ILogger>(...)

内部

using (OpenRastaConfiguration.Manual)

ブロック。

これはほとんどのログ メッセージで問題なく機能しますが、OpenRasta の一部のクラスは、HostManager のように、DI の準備が整う前に ILogger インスタンスを見つけようとします。

static HostManager()
{
    Log = DependencyManager.IsAvailable
        ? DependencyManager.GetService<ILogger>()
        : new TraceSourceLogger();
}

私の場合 (そして一般的なケースだと思います)、IsAvailableは false であるため、デフォルトでTraceSourceLoggerになります。

static ILogger HostManager.Logは公開プロパティではないため、ハッキングして公開し、設定できるようにしました。

オブジェクトの構築時に常にnew TraceSourceLogger()に初期化されるInternalDependencyResolverに関しては、パブリックに設定可能な IL​​ogger Logプロパティがあるため、それをそのまま使用できます。

これまでに遭遇した OpenRasta のログ メッセージはすべて、カスタム ILogger に送られます。

ソースをハックせずにカスタム ILogger にログを記録するために、OpenRasta のすべてのクラス (私は体系的にチェックしておらず、1 つまたは 2 つのクラスを見逃している可能性があります) を取得する方法を知っている人はいますか? (OpenRasta のアップグレードでは、再パッチや再構築が必要ないことを常に知っておくと便利です)

4

1 に答える 1

0

お気づきのとおり、これは順序の問題です。ただし、それを修正するためにパッチを適用できてうれしいです。

于 2012-01-24T15:42:20.560 に答える