zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    [HNOI2004]宠物收养所 题解
    文艺平衡树(区间翻转)(Splay模板)
    搜索专题 题解
    Gorgeous Sequence 题解 (小清新线段树)
    花神游历各国 题解(小清新线段树/树状数组+并查集)
    [HNOI2012]永无乡 题解
    poj 3683 2-sat问题,输出任意一组可行解
    hdu 1824 2-sat问题(判断)
    hdu 4115 石头剪子布(2-sat问题)
    hdu 4421 和poj3678类似二级制操作(2-sat问题)
  • 原文地址:https://www.cnblogs.com/lhxsoft/p/5322585.html
Copyright © 2011-2022 走看看