zoukankan      html  css  js  c++  java
  • Orchard源码分析(4.2):Orchard.Logging.LoggingModule类

    与CollectionOrderModule一样,LoggingModule也是一个Autofac模块。它以属性注入的方式给需要日志服务的对象设置Logger。

       如果一个类有Orchard.Logging.ILogger型的公共可写实例属性(忽略索引),Autofac容器在解析(Resolve)该类的时 候,将"注入"一个ILogging实现类的实例。Orchard默认会注入一个CastleLogger对象。当然Orchard也允许一个类中有多个 ILogger型属性,也支持将CastleLogger替换成其他Logger。
    如有必要,请先了解一下简单工厂模式、抽象工厂模式和适配器模式。CastleLoggerFactory工厂负责创建CastleLogger对象,而CastleLoggerFactory适配了OrchardLog4netFactory;CastleLogger实际上适配的是OrchardLog4netLogger;OrchardLog4netLogger又适配了log4net.Core.ILogger——也就是说CastleLogger是log4net.Core.ILogger经过层层包装的结果
     
    如果有类TestContrller,其有一个名为Logger的ILogger型属性,注入流程如下: 1、Autofac容器创建TestController类的实例instance; 2、检查instance是否有一个ILogger型的公共可写实例属性。如果有(有可能还不只一个)则进入步骤3,否则以下步骤不没必要进行了; 3、从缓存中获取TestController类型对应的Logger,如果获取成功进入步骤6; 4、从Autofac容器获取ILogger:
    从容器中获取CastleLoggerFactory
    ->CastleLoggerFactory创建ILogger对象
    ->交由OrchardLog4netFactory创建OrchardLog4netLogger
    ->交由log4net.LogManager.GetLogger创建一个log4net.Core.ILogger对象
    ->log4net.Core.ILogger对象适配成OrchardLog4netLogger对象
    ->OrchardLog4netLogger对象适配成CastleLogger对象
    ->CastleLoggerFactory最终返回一个CastleLogger对象
    5、缓存CastleLogger对象(与TestController类关联)
    6、将CastleLogger注入TestContrller对象的Logger属性。
     
     
     
    相关类型:
    Orchard.Logging.CastleLogger : Orchard.Logging.ILogger
    Orchard.Logging.CastleLoggerFactory : Orchard.Logging.ILoggerFactorya
    Orchard.Logging.OrchardLog4netFactory : Castle.Core.Logging.ILoggerFactory
    Orchard.Logging.OrchardLog4netLogger
  • 相关阅读:
    Mariadb Galera Cluster 群集 安装部署
    RabbitMQ Cluster群集安装配置
    Glance 镜像服务群集
    Nova控制节点集群
    openstack集群环境准备
    http高可用+负载均衡 corosync + pacemaker + pcs
    cinder块存储控制节点
    cinder块存储 后端采用lvm、nfs安装配置
    web管理kvm ,安装webvirtmgr
    kvm虚拟机管理 系统自动化安装
  • 原文地址:https://www.cnblogs.com/lhxsoft/p/5322501.html
Copyright © 2011-2022 走看看