我创建了自己的 ILogger 实现并通过
ResourceSpace.Uses.Resolver.AddDependencyInstance<ILogger>(...)
在 - 的里面
using (OpenRastaConfiguration.Manual)
堵塞。
这适用于大多数日志消息,但是 OpenRasta 中的某些类会在 DI 准备好之前尝试找出它们的 ILogger 实例,例如 HostManager:
static HostManager()
{
Log = DependencyManager.IsAvailable
? DependencyManager.GetService<ILogger>()
: new TraceSourceLogger();
}
在我的情况下(我怀疑一般情况),IsAvailable是假的,所以它默认为TraceSourceLogger。
由于静态 ILogger HostManager.Log不是公共属性,我将其破解并公开,以便我现在可以设置它。
对于InternalDependencyResolver,它总是在对象构造时初始化为new TraceSourceLogger(),它确实有一个可公开设置的ILogger Log属性,所以我可以使用它。
现在,到目前为止我遇到的所有 OpenRasta 的日志消息都转到了我的自定义 ILogger。
有谁知道一种方法可以让所有 OpenRasta 的课程(我没有系统地检查,可能错过了一两节课)登录到自定义 ILogger 而不必破解源代码?(很高兴知道升级 OpenRasta 不需要重新修补和重建)