【发布时间】:2016-08-31 19:53:38
【问题描述】:
所以,为了提供一些上下文,因为这总是有帮助的,我们正在使用 LightInject、Log4Net 和 Common.Logging。如果我们将记录器初始化为:
public static ILog Logger = LogManager.GetLogger<someType>();
记录器在第一次实例化类时工作(通过 LightInject),之后似乎再也没有记录(或者它甚至可能第一次不记录,有时很难说)。
如果我们把那行改成这个(注意细微的差别)它总是有效的。
public static readonly ILog Logger = LogManager.GetLogger<someType>();
所以...我知道静态只读只能为类初始化设置一次,并且可以像我们正在做的那样设置,也可以在静态构造函数中设置。但是,如果我们不将它设为只读,为什么它会“丢失”记录器呢?
【问题讨论】:
-
我的猜测是它被某种方式覆盖了,可能是被 LightInject 覆盖了。用这里的东西是不可能的。您可以尝试将其设置为属性并在 setter 上设置断点。
-
您也可以尝试将其设为受保护或私有,我知道在 Castle.Windsor 的情况下它只能注入公共成员。
-
查看answer
-
是什么让您认为记录器会丢失?
-
@hvd 很抱歉我的迂腐失误。