0

我创建了自己的 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 不需要重新修补和重建)

4

1 回答 1

0

正如您所发现的,这是一个订购问题。不过,很高兴采取补丁来解决这个问题。

于 2012-01-24T15:42:20.560 回答