我创建了自己的ILogger实现并通过
注册实例ResourceSpace.Uses.Resolver.AddDependencyInstance<ILogger>(...)
里面的
using (OpenRastaConfiguration.Manual)
块。
这适用于大多数日志消息,但是OpenRasta中的某些类在DI准备好之前尝试找出他们的ILogger实例,比如HostManager:
static HostManager()
{
Log = DependencyManager.IsAvailable
? DependencyManager.GetService<ILogger>()
: new TraceSourceLogger();
}
在我的情况下(我怀疑一般情况), IsAvailable 为false,因此默认为 TraceSourceLogger 。
由于静态ILogger HostManager.Log 不是公共属性,我将其破解并公开,以便我现在可以设置它。
对于 InternalDependencyResolver ,它始终在对象构造时初始化为 new TraceSourceLogger(),它确实有一个可公开设置的 ILogger Log 属性,所以我可以使用它。
现在我遇到的所有OpenRasta的日志消息都转到了我的自定义ILogger。
有没有人知道如何获取所有OpenRasta的类(我没有系统地检查并且可能错过了一两个类)来登录自定义ILogger而不必破解源代码? (总是很高兴知道升级OpenRasta不需要重新安装和重建)
答案 0 :(得分:0)
正如您所发现的,这是一个订购问题。很乐意接受补丁来解决这个问题。