请注意,本站并不支持低于IE8的浏览器,为了获得最佳效果,请下载最新的浏览器,推荐下载 Chrome浏览器
欢迎光临。交流群:166852192

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



作者原创内容不容易,如果觉得内容不错,请点击右侧“打赏”,赏俩给作者花花,也算是对作者付出的肯定,也可以鼓励作者原创更多更好内容。
更多详情欢迎到QQ群 166852192 交流。