HostManager和InternalDependencyResolver中的软代码ILogger

时间:2011-11-30 08:56:42

标签: openrasta

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

1 个答案:

答案 0 :(得分:0)

正如您所发现的,这是一个订购问题。很乐意接受补丁来解决这个问题。