Orchard 日志加载

来源:互联网 发布:java如何调用接口 编辑:程序博客网 时间:2024/06/06 03:14
Orchard使用Autofac通过属性注入方式,设置类的ILogger属性获得日志服务.


builder.RegisterModule(new LoggingModule());
1.注册LoggingModule模块


moduleBuilder.RegisterType<CastleLoggerFactory>().As<ILoggerFactory>().InstancePerLifetimeScope();
moduleBuilder.RegisterType<OrchardLog4netFactory>().As<Castle.Core.Logging.ILoggerFactory>().InstancePerLifetimeScope();


2.注册CastleLoggerFactory和OrchardLog4netFactory类型【这里CastleLoggerFactory适配了OrchardLog4netFactory,OrchardLog4netFactory的Create方法返回OrchardLog4netLogger对象,OrchardLog4netLogger适配了log4net.Core.ILogger,实现Castle.Core.Logging.ILogger接口】


/*
关于适配器模式适用性:
你想使用一个已经存在的类,而它的接口不符合你的需求。 
你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。 
(仅适用于对象A d a p t e r )你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。 
*/


var logger = _loggerCache.GetOrAdd(component, key => ctx.Resolve<ILogger>(new TypedParameter(typeof(Type), componentType)));
propertyInfo.SetValue(instance, logger, null);
3.重载Module的AttachToComponentRegistration方法,循环所有注入对象,查找具有ILogger属性的类,在类创建的时候设置ILogging实例

获得ILogging实例顺序
CastleLoggerFactory.CreateLogger调用OrchardLog4netFactory.Created 返回CastleLogger对象,CastleLogger适配了Orchard.Logging.ILogger
OrchardLog4netFactory.Created创建OrchardLog4netLogger对象 

OrchardLog4netLogger通过log4net实现日志


睡觉!Zzzzzzzz..




0 0
原创粉丝点击