惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
MyScale Blog
MyScale Blog
博客园 - Franky
The Cloudflare Blog
IT之家
IT之家
Blog — PlanetScale
Blog — PlanetScale
博客园 - 聂微东
WordPress大学
WordPress大学
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
The Blog of Author Tim Ferriss
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
Google DeepMind News
Google DeepMind News
P
Proofpoint News Feed
Martin Fowler
Martin Fowler
aimingoo的专栏
aimingoo的专栏
J
Java Code Geeks
腾讯CDC
雷峰网
雷峰网
Microsoft Azure Blog
Microsoft Azure Blog
G
Google Developers Blog
博客园 - 【当耐特】
美团技术团队
云风的 BLOG
云风的 BLOG

博客园 - alby

在 ASP.NET Core Web API 中处理 Patch 请求 一种有界队列(Bounded Buffer)的实现 基于 Mediasoup 的 Abp vNext 视频会议模块 使用 ASP.NET Core 作为 mediasoup 的信令服务器 ASP.NET Core 的 `Core` 有几种写法? ASP.NET Core MVC 授权的扩展:自定义 Authorize Attribute 和 IApplicationModelProvide OrchardCore 如何实现模块化( Modular )和 Multi-Tenancy [iOS]关于状态栏(UIStatusBar)的若干问题 [iOS]关于视频方向的若干问题 --2015-06-24-- Orchard源码分析(7.2):Controller相关 Orchard源码分析(7.1):Routing(路由)相关 Orchard源码分析(7):ASP.NET MVC相关 Orchard源码分析(4.4):Orchard.Caching.CacheModule类 Orchard源码分析(6):Shell相关 Orchard源码分析(5.3):EndRequest事件处理(DefaultOrchardHost.EndRequest方法) Orchard源码分析(5.1):Host初始化(DefaultOrchardHost.Initialize方法) Orchard源码分析(5):Host相关(Orchard.Environment.DefaultOrchardHost类) Orchard源码分析(4.3):Orchard.Events.EventsModule类(Event Bus)
Orchard源码分析(5.2):BeginRequest事件处理(DefaultOrch...
alby · 2012-10-18 · via 博客园 - alby

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