博客

Orchard源码分析(5.1):Host初始化(IOrchardHost.Initialize方法)

作者: alby      时间: 2012年8月30日 15:16:00

概述 Orchard作为一个可扩展的CMS系统,需要在初始化或运行时加载一些模块(Modules)或主题(Themes),这些模块或主题统称扩展(Extensions)。在初始化过程中会对扩展进行设置:DefaultOrchardHost.SetupExtensions方法。 当添加新的扩展、删除扩展、修改扩展源码后,需要通知扩展加载器(Extension Loader)重新加载或完成一些清理工作,所以需要进行监视:DefaultOrchardHost.MonitorExtensions方法。 Orchard是一个多租户(Tenant)系统,也就是我们通常所是说的子站点,它允 …

阅读全文...

Orchard源码分析(5):Host相关(Orchard.Environment.DefaultOrchardHost类)

作者: alby      时间: 2012年8月30日 15:13:00

概述 回顾一下之前对Orchard.Web.MvcApplication类的分析。在Orchard启动时,会创建一个DefaultOrchardHost对象: DefaultOrchardHost对象是应用程序域级的单例,可以简单地理解为它代表Orchard应用程序。它主要作用是进行初始化Orchard、处理BeginRequest和EndRequest事件,以及另外的这里暂不关注操作。DefaultOrchardHost类涉及到的内容相当复杂,所以用几个独立的篇幅来表述。 一、Host初始化 参考《Orchard源码分析(5.1):Host初始化( …

阅读全文...

Orchard源码分析(4.3):Orchard.Events.EventsModule类(Event Bus)

作者: alby      时间: 2012年8月30日 15:04:00

概述 采用Event Bus模式,可以使观察者模式中的观察者和被观察者实现解耦。 在.Net中使用观察者模式,可以使用事件(委托)和接口(类)。Orchard Event Bus使用的是接口的形式,这样方便将“观察者”注册到Autofac容器中。EventsModule模块是构成Orchard Event Bus(事件总线)的一部分。这里先分开分析Orchard Event Bus涉及的类型和知识点,然后在将他们组合起来分析Orchard Event Bus的机制。 一、Registration Source 首先EventsModule也是一个 …

阅读全文...

Orchard源码分析(4.4):Orchard.Caching.CacheModule类

作者: alby      时间: 2012年8月30日 15:04:00

概述 CacheModule也是一个Autofac模块。 一、CacheModule类 CacheModule将DefaultCacheManager注册为ICacheManager:      public class CacheModule : Module {          protected override void Load( ContainerBuilder& …

阅读全文...

Orchard源码分析(4.2):Orchard.Logging.LoggingModule类

作者: alby      时间: 2012年8月30日 15:03:00

与CollectionOrderModule一样,LoggingModule也是一个Autofac模块。它以属性注入的方式给需要日志服务的对象设置Logger。 如果一个类有ILogger型的公共可写实例属性(忽略索引),Autofac容器在解析(Resolve)该类的时候,将"注入"一个ILogging实现类的实例。Orchard默认会注入一个CastleLogger对象。当然Orchard也允许一个类中有多个ILogger型属性,也支持将CastleLogger替换成其他Logger。 如有必要,请先了解一下简单工厂模式、抽象工厂模式和适配器模式(对象适配器模式)。 …

阅读全文...

Orchard源码分析(4.1):Orchard.Environment.CollectionOrderModule类

作者: alby      时间: 2012年8月30日 15:02:38

CollectionOrderModule类是一个Autofac模块(Module,将一系列组件和相关的功能包装在一起),而非Orchard模块。其作用是保证多个注册到容器的组件能按FIFO(First In First Out)的顺序提取。下面举例说明: 1、创建ICustomerService接口:     public interface ICustomerService { }    2、创建两个实现ICustomerService接口的类:      …

阅读全文...

Orchard源码分析(3):Orchard.WarmupStarter程序集

作者: alby      时间: 2012年8月30日 15:01:00

概述 Orchard.WarmupStarter程序集包含三个类:WarmupUtility、WarmupHttpModule和Starter<T>。该程序集主要为Orchard应用启动初始化服务。一、WarmupUtility类该类是一个静态工具类,包含一个静态只读字段WarmupFilesPath,以及三个方法EncodeUrl、ToUrlString和DoBeginRequest。1、WarmupFilesPath其值为"~/App_Data/Warmup/"。 2、EncodeUrl方法与HttpServerUtility.UrlEncode或 …

阅读全文...

Orchard源码分析(4):Orchard.Environment.OrchardStarter类

作者: alby      时间: 2012年8月30日 15:01:00

概述 OrchardStarter类是个静态类,主要作用是配置Autofac容器以及创建IOrchardHost(DefaultOrchardHost)对象,分别对应CreateHost和CreateHostContainer这两个静态方法。 一、CreateHost方法 CreateHost方法接受一个委托参数,返回一个IOrchardHost(Orchard宿主)型实例:     public static IOrchardHost CreateHost( Action< …

阅读全文...

Orchard源码分析(2):Orchard.Web.MvcApplication类(Global)

作者: alby      时间: 2012年8月30日 14:46:00

概述 分析一个的ASP.NET项目源码,首先可以浏览其项目结构,了解项目之间的依赖关系,可以大致一窥项目的全貌。其次可以浏览Web.config和Global.asax文件,可以找到应用程序的入口。 本文主要分析Orchard项目的Global.asax文件,而真正的分析入口点在Global.asax的CodeBehind文件Global.asax.cs中,即Orchard.Web.MvcApplication类(以下简称MvcApplication类)。 MvcApplication类处理了三个事件Start,BeginRequest和EndRequest。其中是否真有名为 …

阅读全文...

Orchard源码分析(1):Orchard架构

作者: alby      时间: 2012年8月30日 14:43:00

源码分析应该做到庖丁解牛,而不是以管窥豹或瞎子摸象。所以先对Orchard架构有个整体的了解,以及对一些基本概念有所认识。 创建一个基于Web的CMS(内容管理系统)不同于创建一个普通的Web应用程序:它更像是建立一个应用程序容器。 这样一个系统,必须拥有优秀的开放性、可扩展性。但是作为一个可扩展系统,它可能会面临应用程序"可用性"的挑战:在系统中的核心模块与未知的未来模块的组合,包括用户界面级别的整合。编排所有这些小零件,让互不知道的彼此的模块成一个连贯的整体,是Orchard是关键。 本文主要参考官方文档"How Orchard works"以及Orchardch上的翻译。 …

阅读全文...