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