zoukankan      html  css  js  c++  java
  • Orchard详解--第二篇 启动

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

      

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

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

    • 加载拓展模块。
    • 监控拓展模块。
    • 创建和激活Shell(多租户)。
     
    代码如下:
     1        IEnumerable<ShellContext> BuildCurrent() {
     2             if (_shellContexts == null) {
     3                 lock (_syncLock) {
     4                     if (_shellContexts == null) {
     5                         SetupExtensions();
     6                         MonitorExtensions();
     7                         CreateAndActivateShells();
     8                     }
     9                 }
    10             }
    11             return _shellContexts;
    12         }
     
    小结:
    本章分析了Orchard的主要启动过程,除开WarmupStarter之外,它主要过程如下图所示。
     
     
    另本系列主要强调从Orchard中能够学到什么,在这里我认为Orchard在启动时使用队列阻止请求以及Orchard初始化的步骤都是可以借鉴的。
  • 相关阅读:
    记录-tomcat启动项目配置
    记录 -- js浏览器窗口关闭调用ajax
    远程桌面时出现身份验证错误,要求的函数不受支持
    记录-马斯洛需求层次理论模型
    记录-powerDesigner 导入sql文件注释问题
    记录-Java md5加密
    记录--js 剪贴板操作 (转载)
    如何判定一台计算机的唯一性
    GO_OOP简单摘要
    后台执行命令
  • 原文地址:https://www.cnblogs.com/selimsong/p/5995646.html
Copyright © 2011-2022 走看看