Orchard源码分析(5.2):BeginRequest事件处理(DefaultOrchardHost.BeginRequest方法)
2016-03-26 12:02
369 查看
BeginRequest事件处理的作用是确保所有Shell已经加载,或者在扩展有变化的时候重新加载。
[align=left] void IOrchardHost .BeginRequest() {[/align]
[align=left] Logger.Debug( "BeginRequest");[/align]
[align=left] BeginRequest();[/align]
[align=left] }[/align]
[align=left] protected virtual void BeginRequest() {[/align]
[align=left] // Ensure all shell contexts are loaded, or need to be reloaded if[/align]
[align=left] // extensions have changed[/align]
[align=left] MonitorExtensions();[/align]
[align=left] BuildCurrent();[/align]
[align=left] StartUpdatedShells();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left]通过对IOrchardHost.Initialize方法的分析对MonitorExtensions和BuildCurrent方法就不陌生了。这里主要关注一下StartUpdateShells方法:[/align]
[align=left] void StartUpdatedShells() {[/align]
[align=left] lock (_syncLock) {[/align]
[align=left] if (_tenantsToRestart.Any()) {[/align]
[align=left] foreach (var settings in _tenantsToRestart.Distinct().ToList()) {[/align]
[align=left] ActivateShell(settings);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] _tenantsToRestart = Enumerable.Empty<ShellSettings >();[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]_tenantsToRestart是一个ShellSettings的集合:[/align]
[align=left] private IEnumerable <ShellSettings> _tenantsToRestart;[/align]
[align=left] [/align]
[align=left]该 方法的作用是重新激活Shell。在Orchard中,提出子站点(Tenant)的概念,目的是为了增加站点密度,即一个应用程序域可以有多个子站点。 Shell是子站点(Tenant)级的单例,换句话说Shell代表了子站点。当某些对Orchard的配置改变,而这种改变只是针对某个或某些 Shell,没必要重新启动整个应用程序的时候,可以通过这种方式来重新激活Shell。举个形象点的例子,我们在Windows安装或更新应用程序的 后,有时候我们需要重启操作系统,而有的时候我们只需要重新启动应用程序就可以了。[/align]
[align=left] [/align]
关于Shell,我们有专门的篇幅来介绍,包括Shell是什么及其作用、更详细创建及激活操作分析。
相关类型:
Orchard.Environment.DefaultOrchardHost : IOrchardHost
[align=left] void IOrchardHost .BeginRequest() {[/align]
[align=left] Logger.Debug( "BeginRequest");[/align]
[align=left] BeginRequest();[/align]
[align=left] }[/align]
[align=left] protected virtual void BeginRequest() {[/align]
[align=left] // Ensure all shell contexts are loaded, or need to be reloaded if[/align]
[align=left] // extensions have changed[/align]
[align=left] MonitorExtensions();[/align]
[align=left] BuildCurrent();[/align]
[align=left] StartUpdatedShells();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left]通过对IOrchardHost.Initialize方法的分析对MonitorExtensions和BuildCurrent方法就不陌生了。这里主要关注一下StartUpdateShells方法:[/align]
[align=left] void StartUpdatedShells() {[/align]
[align=left] lock (_syncLock) {[/align]
[align=left] if (_tenantsToRestart.Any()) {[/align]
[align=left] foreach (var settings in _tenantsToRestart.Distinct().ToList()) {[/align]
[align=left] ActivateShell(settings);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] _tenantsToRestart = Enumerable.Empty<ShellSettings >();[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]_tenantsToRestart是一个ShellSettings的集合:[/align]
[align=left] private IEnumerable <ShellSettings> _tenantsToRestart;[/align]
[align=left] [/align]
[align=left]该 方法的作用是重新激活Shell。在Orchard中,提出子站点(Tenant)的概念,目的是为了增加站点密度,即一个应用程序域可以有多个子站点。 Shell是子站点(Tenant)级的单例,换句话说Shell代表了子站点。当某些对Orchard的配置改变,而这种改变只是针对某个或某些 Shell,没必要重新启动整个应用程序的时候,可以通过这种方式来重新激活Shell。举个形象点的例子,我们在Windows安装或更新应用程序的 后,有时候我们需要重启操作系统,而有的时候我们只需要重新启动应用程序就可以了。[/align]
[align=left] [/align]
关于Shell,我们有专门的篇幅来介绍,包括Shell是什么及其作用、更详细创建及激活操作分析。
相关类型:
Orchard.Environment.DefaultOrchardHost : IOrchardHost
相关文章推荐
- SystemConfig.getPropertyValue("test");配置文件已经加了test=abc,但是取得时候空字符串
- require.js 入门笔记
- UITabBarController 根视图控制器
- HDU Buildings
- String、StringBuffer和StringBuilder使用和区别
- 在storyboard中的静态UITableView中拖入 UISearchBar and Search Display Controller出现的奇怪问题
- HDU 3436 Queue-jumpers
- java Queue集合
- hdu 4441 Queue Sequence
- Guice学习之Bindings
- 使用easyui-textbox, 点回车键,执行某个按钮的方法
- POJ 2524 Ubiquitous Religions
- UIScrollView的delaysContentTouches与canCencelContentTouches属性
- UIScrollView的作用原理,实现scrollView中touch事件作用子视图
- UIScrollView上的控件处理touch事件
- UIScrollView的属性总结
- UITableView 如何不动态计算返回的cell 的高度
- 利用UIStoryboard实现从一个视图控制器界面跳到另一个视图控制器界面
- run as maven build时报错
- WebSphere Message Queue(MQ)与WebSphere Message Queue Broker(MB)的区别