Orchard Framework作为框架它与类库最大的区别就是框架是将一系列零散的组件组合在一起形成一个整体,接下来就对Orchard Framework如何分析Orchard如何将相关组件结合在一起的,也就是这个框架的启动过程。
Orchard的启动过程可以按以下文件查看。
  1. Orchard.Web.Global.asax:这个文件主要是包含了应用级事件的处理代码,一般用于ASP.NET程序启动时初始化等等,在Orchard里面也是通过Application_Start事件来对应用程序进行初始化工作(这里的初始化主要是定义HostInitialization、HostBeginRequest和HostEndRequest三个委托,并将其交给Starter去处理)。
      protected void Application_Start() {
            RegisterRoutes(RouteTable.Routes);
            _starter = new Starter<IOrchardHost>(HostInitialization, HostBeginRequest, HostEndRequest);
            _starter.OnApplicationStart(this);
        }
注:这里已经引用Autofac定义了对路由表等信息注册的方法并且在HostInitialization调用了IoC容器创建,后续详解。
     private static IOrchardHost HostInitialization(HttpApplication application) {
var host = OrchardStarter.CreateHost(MvcSingletons); host.Initialize(); // initialize shells to speed up the first dynamic query
host.BeginRequest();
host.EndRequest(); return host;
} static void MvcSingletons(ContainerBuilder builder) {
builder.Register(ctx => RouteTable.Routes).SingleInstance();
builder.Register(ctx => ModelBinders.Binders).SingleInstance();
builder.Register(ctx => ViewEngines.Engines).SingleInstance();
}

  

 
 2.Orchard.WarmupStarter.Starter.cs:启动器主要有三个作用

  • 结合WarmupHttpModule,在启动过程中阻止请求,待启动完成后处理请求队列。
  • 记录启动过程中出现的错误,如果存在错误会通过监听到的请求事件来重新初始化。
  • 创建IoC容器,这里也是最重要的一点,通过Global.asax中定义的HostInitialization,来完成整个基础容器的创建。

 3.Orchard.Framework.DefaultOrchardHost.cs:Host是Orchard启动的整个核心,它的启动主要有3个步骤:

  • 加载拓展模块。
  • 监控拓展模块。
  • 创建和激活Shell(多租户)。
 
代码如下:
        IEnumerable<ShellContext> BuildCurrent() {
            if (_shellContexts == null) {
                lock (_syncLock) {
                    if (_shellContexts == null) {
                        SetupExtensions();
                        MonitorExtensions();
                        CreateAndActivateShells();
                    }
                }
            }
            return _shellContexts;
        }
 
小结:
本章分析了Orchard的主要启动过程,除开WarmupStarter之外,它主要过程如下图所示。
 

 
另本系列主要强调从Orchard中能够学到什么,在这里我认为Orchard在启动时使用队列阻止请求以及Orchard初始化的步骤都是可以借鉴的。

Orchard详解--第二篇 启动的更多相关文章

  1. IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm(转载)

    IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm 自从本系列发布之后,收到了很多的朋友的回复!非常感谢,同时很多朋友问到了一些问题,有些问 ...

  2. Orchard详解--第九篇 拓展模块及引用的处理

    在分析Orchard的模块加载之前,先简要说一下因为Orchard中的模块并不是都被根(启动)项目所引用的,所以当Orchard需要加载一个模块时首先需要保证该模块所依赖的其它程序集能够被找到,那么才 ...

  3. Java中JNI的使用详解第二篇:JNIEnv类型和jobject类型的解释

    上一篇说的是一个简单的应用,说明JNI是怎么工作的,这一篇主要来说一下,那个本地方法sayHello的参数的说明,以及其中方法的使用 首先来看一下C++中的sayHello方法的实现: JNIEXPO ...

  4. Orchard详解--第一篇 介绍

    Orchard是一个开源的内容管理系统(CMS),它提供了简单的向导式的安装方法,用于快速建站(如WordPress).对于.Net的开发者来说,Orchard有更好的学习价值,所以本系列文章将对Or ...

  5. python中的builtin函数详解-第二篇

    classmethod(function) 这里不过多说明这个builtin方法的具体用法,python的文档和help函数已经给了这个方法充足的使用说明,所以我这里要说的时关于 classmetho ...

  6. IIS负载均衡-Application Request Route详解第一篇: ARR介绍(转载)

    IIS负载均衡-Application Request Route详解第一篇: ARR介绍 说到负载均衡,相信大家已经不再陌生了,本系列主要介绍在IIS中可以采用的负载均衡的软件:微软的Applica ...

  7. IIS负载均衡-Application Request Route详解第一篇: ARR介绍

    IIS负载均衡-Application Request Route详解第一篇: ARR介绍 说到负载均衡,相信大家已经不再陌生了,本系列主要介绍在IIS中可以采用的负载均衡的软件:微软的Applica ...

  8. bt协议详解 DHT篇(上)

    bt协议详解 DHT篇(上) 最近开发了一个免费教程的网站,突然产生了仔细了解bt协议的想法,这篇文章是bt协议详解系列的第三篇,后续还会写一些关于搜索和索引的东西,都是在开发这个网站的过程中学习到的 ...

  9. Redis详解入门篇

    Redis详解入门篇 [本教程目录] 1.redis是什么2.redis的作者3.谁在使用redis4.学会安装redis5.学会启动redis6.使用redis客户端7.redis数据结构 – 简介 ...

随机推荐

  1. 浅尝Spring Cloud Sleuth

    Spring Cloud Sleuth提供了分布式追踪(distributed tracing)的一个解决方案.其基本思路是在服务调用的请求和响应中加入ID,标明上下游请求的关系.利用这些信息,可以方 ...

  2. UVa OJ 120

    Background背景 Stacks and Queues are often considered the bread and butter of data structures and find ...

  3. Chapter 4 Invitations——4

    I wanted very much to talk to him, and the day after the accident I tried. 在发生事故之后我尽力尝试,我很想和他聊聊. The ...

  4. Java中char和String 的深入理解 - 字符编码

    开篇 https://blog.csdn.net/weixin_37703598/article/details/80679376 我们并不是在写代码,我们只是将自己的思想通过代码表达出来! 1 将思 ...

  5. Facebook ATC弱网环境搭建

    用户的网络环境千姿百态,弱网的.高延时的.丢包的.常有用户反馈偶发bug,我们测试人员却始终无法复现,根据用户的描述,开发排查可能是网络不稳定导致的,所以急需建个弱网环境来测试. 弱网工具简介: Au ...

  6. Ubuntu apt-get和pip国内源更换

    Ubuntu apt-get和pip源更换 更新数据源为国内,是为了加速安装包的增加速度. 更换apt-get数据源 输入:sudo -s切换为root超级管理员: 执行命令:vim /etc/apt ...

  7. Linux下获取java堆栈文件并进行分析

    当服务器内存飙升或者cpu负载飙升的时候,可以使用如下步骤排查问题: 1.终端输入top命令,键盘大写的情况下按P(cpu负载率从高到低排序)或者M(内存使用率从高到低排序),可以查看导致cpu或者内 ...

  8. Ubuntu16---安装mysql5.7未提示输入密码,安装后修改mysql密码默认密码

    Ubuntu16安装mysql5.7未提示输入密码,安装后修改mysql密码默认密码 mysql默认密码为空 但是使用mysql -uroot -p 命令连接mysql时,报错 ERROR 1045 ...

  9. PAT之写出这个数

    读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10^100^. 输出格式:在一行内输出n的各位数字之和 ...

  10. DataTable和List互转

    /// <summary> /// list转datatable /// </summary> /// <typeparam name="T"> ...