我已经通过了其中的一些问题,各地不同地点铺设颠簸了一下,答案似乎是由L4N officianados向着轻量化的包装,log4net的“是”的值纺(你明白吗?)和心灵的相似点-boggling事实。
不过似乎有什么用户所要求的(这是我的问题)是如何适应log4net的客体模型转换的流畅配置界面registertype / registerinstance序列。
这里的目标将不会被重新包装L4N,而仅仅是为了抓住一个像样的参考,这并不”需要劫持的流畅流,因为它是。
ejemplow差,我想从一个LogManger.GetLogger方法的ILog的一个配置实例的引用,并把它放入一口流利的流量足够早将其注入到我的下游对象的属性。
因此,在应对一个不耐烦的建议,我试图在规范的方式创建的ILog的正常实例:
log4net.Config.XmlConfigurator.Configure();
static readonly log4Net.Ilog Log = LogManager.GetLogger(thatlongassemblyreflectionstuff);
因此,这将是微不足道的(在毫不费力的真正意义上)现在引用添加到统一容器中,用我的美好的生活。
但是,对于RegisterInstance方法签名想要一个“类型”不是一个接口。
对于那些谁没有通过log4net的对象模型搜索时,afficiananderos是正确的:L4N是“包装”,你不能得到日志的thingie实际的“类型”的霍尔特。
所以,现在我来测试一下。 你知道这意味着什么,这可能需要一分钟,但更可能需要一个小时或四(像“小时”和“四”的拼写similarilties是从来没有在现实生活中的巧合)。
但是,下面,减去约规范设置消隐部分,做过的工作:
container
.RegisterInstance("Logger", Log, new ContainerControlledLifetimeManager())
.RegisterType<IControllerContext, ControllerContext>
(
"CtlrCtx",
new ContainerControlledLifetimeManager(),
new InjectionConstructor(new ResolvedParameter<IMessageBuilder>("MsgBldr")),
new InjectionProperty("Log",new ResolvedParameter<ILog>("Logger"))
);
所以,注入我的marvy小上下文对象的属性为原单日志对象和Log对象的哈希码是相同的。
然而...
注射过程中要求我通过它的接口暴露Context对象的Log属性,这意味着它可能不再是一个静态的对象。 而无论是log4net的ILog的对象是静态的,似乎是决定性的因素是否是序列化和可组件之间mashalled没有戏剧性的“运行时将变得不稳定的警告(这是真正有意义的只有矩阵风扇)。
劝阻,但没有阻止,我用ReSharper的漂亮的“财产与支持字段”并将支持字段是静态的,而界面特性住非静态的。 那么它建成并试跑了绿色。
所以我甚至重建和它的工作。 所以,也许当这冒泡的集成测试,我会潜行过去log4net的不是序列化的崩溃。
因此,也许这将帮助
谢谢
状态