我一直在研究如何注入log4net的ILog的使用到温莎城堡类。 在大多数实施例中,我看到城堡温莎可以提供一个“引导”,其提供属性注射和喷射ILogger(未的ILog)。 我已经发现当使用构造器注射只是一个例子,并且不使用辅助器的方法(请参见城堡温莎依赖注入:使用呼叫者类型作为参数 )
在所有这些例子,似乎log4net的希望有一个名为记录。 大多数示例参考log4net的静态方法LogManager.GetLogger(类名称这里)。 这使得以限定用于CastleWindsor的依赖关系,而无需使用反射,或主持人方法的挑战(可以协调器方法与构造函数注射使用???)。 当伊利亚高根(URL上面......)的问题来看,我想我不明白为什么我需要,甚至想指定logger。 我不能同名到处使用记录?
例如,我不能只是注册XXX的硬编码名称的记录? (这似乎做工精细,并在年底,我只是想记录 - 我不关心哪个记录器记录的吧...)是否有一个范围的问题吗? 是否有内存泄漏问题? 为什么不能/不应该记录器是一个单身?
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
Component.For<log4net.ILog>().UsingFactoryMethod(() => log4net.LogManager.GetLogger("xxx"))
);
}
更新:
在一些研究中,硬编码命名为记录器可以使用 - 如在我的上述例子XXX,但如果记录器的配置的记录器名称输出到日志文件,并且如果记录器名称被动态地分配给相同的名称作为方法或类,你自动地获得参考日志源自何处。 日志文件中的环境可以是非常有益的。
当专门针对构造函数注入,似乎有5点可能的选择...
- 使用独立的,并没有使用命名记录器(因而日志文件未报道)
- 与男星注射使用反射(如被看见在伊利亚高根的例子)
- 使用属性注入(通过主持人)
- 使用后急剧AOP IL注射用于记录
- 使用CTOR注射(通过主持人)