独自の 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に関しては、パブリックに設定可能な ILogger Logプロパティがあるため、それをそのまま使用できます。
これまでに遭遇した OpenRasta のログ メッセージはすべて、カスタム ILogger に送られます。
ソースをハックせずにカスタム ILogger にログを記録するために、OpenRasta のすべてのクラス (私は体系的にチェックしておらず、1 つまたは 2 つのクラスを見逃している可能性があります) を取得する方法を知っている人はいますか? (OpenRasta のアップグレードでは、再パッチや再構築が必要ないことを常に知っておくと便利です)