程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 從Orchard學到的東西--第二篇 啟動,orchard第二篇

從Orchard學到的東西--第二篇 啟動,orchard第二篇

編輯:關於.NET

從Orchard學到的東西--第二篇 啟動,orchard第二篇


Orchard Framework作為框架它與類庫最大的區別就是框架是將一系列零散的組件組合在一起形成一個整體,接下來就對Orchard Framework如何分析Orchard如何將相關組件結合在一起的,也就是這個框架的啟動過程。 Orchard的啟動過程可以按以下文件查看。
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初始化的步驟都是可以借鑒的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved