Orchard源码分析(5.2):BeginRequest事件处理(DefaultOrchardHost.BeginRequest方法)

BeginRequest事件处理的作用是确保所有Shell已经加载,或者在扩展有变化的时候重新加载。

void IOrchardHost .BeginRequest() {

Logger.Debug( "BeginRequest");

BeginRequest();

}

protected virtual void BeginRequest() {

// Ensure all shell contexts are loaded, or need to be reloaded if

// extensions have changed

MonitorExtensions();

BuildCurrent();

StartUpdatedShells();

}

通过对IOrchardHost.Initialize方法的分析对MonitorExtensions和BuildCurrent方法就不陌生了。这里主要关注一下StartUpdateShells方法:

void StartUpdatedShells() {

lock (_syncLock) {

if (_tenantsToRestart.Any()) {

foreach (var settings in _tenantsToRestart.Distinct().ToList()) {

ActivateShell(settings);

}

_tenantsToRestart = Enumerable.Empty<ShellSettings >();

}

}

}

_tenantsToRestart是一个ShellSettings的集合:

private IEnumerable <ShellSettings> _tenantsToRestart;

该 方法的作用是重新激活Shell。在Orchard中,提出子站点(Tenant)的概念,目的是为了增加站点密度,即一个应用程序域可以有多个子站点。 Shell是子站点(Tenant)级的单例,换句话说Shell代表了子站点。当某些对Orchard的配置改变,而这种改变只是针对某个或某些 Shell,没必要重新启动整个应用程序的时候,可以通过这种方式来重新激活Shell。举个形象点的例子,我们在Windows安装或更新应用程序的 后,有时候我们需要重启操作系统,而有的时候我们只需要重新启动应用程序就可以了。

关于Shell,我们有专门的篇幅来介绍,包括Shell是什么及其作用、更详细创建及激活操作分析。

相关类型:

Orchard.Environment.DefaultOrchardHost : IOrchardHost

时间: 2024-08-29 11:25:08

Orchard源码分析(5.2):BeginRequest事件处理(DefaultOrchardHost.BeginRequest方法)的相关文章

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

概述 Host 是应用程序域级的单例,代表了Orchard应用程序.其处理应用程序生命周期中的初始化.BeginRequest事件.EndRequest事件等. 可以简单理解为HttpApplication的功能转移到了Host身上.从源码角度上看,Host对应的是实现了IOrchardHost接口的 DefaultOrchardHost类. 回顾一下之前对Orchard.Web.MvcApplication类的分析.在Orchard启动时,会创建一个DefaultOrchardHost对象:

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

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

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

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

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

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

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

概述 Orchard作为一个可扩展的CMS系统,是由一系列的模块(Modules)或主题(Themes)组成,这些模块或主题统称为扩展(Extensions).在初始化或运行时需要对扩展进行安装:DefaultOrchardHost.SetupExtensions方法. 当添加新的扩展.删除扩展或修改扩展源码后,需要通知扩展加载器(Extension Loader)重新加载或完成一些清理工作,所以需要进行监视:DefaultOrchardHost.MonitorExtensions方法. Orc

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

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

Orchard源码分析(7.1):Routing(路由)相关

概述 关于ASP.NET MVC中路由有两个基本核心作用,一是通过Http请求中的Url参数等信息获取路由数据(RouteData),路由数据包含了area.controller.action的名称等信息.只有获取了匹配的路由数据,才有可能转入ASP.NET MVC管道:二是根据由规则生成Url,比如要根据某些数据生成View上显示的链接. Orchard对路由进行扩展主要基于如下原因: (1).路由定义在各个模块中.在Orchard应用程序初始化时将分散在各个模块的路由定义收集起来统一注册.

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

概述 CacheModule也是一个Autofac模块. 一.CacheModule类 CacheModule将DefaultCacheManager注册为ICacheManager: public class CacheModule : Module { protected override void Load( ContainerBuilder builder) { builder.RegisterType<DefaultCacheManager>() .As< ICacheMana

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

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