using System; using System.Configuration; using System.Web; using System.Web.Caching; using Umbraco.Core.Configuration; using Umbraco.Core.Logging; namespace Umbraco.Core { /// /// the Umbraco Application context /// /// /// one per AppDomain, represents the global Umbraco application /// public class ApplicationContext { /// /// Constructor /// internal ApplicationContext() { //create a new application cache from the HttpRuntime.Cache ApplicationCache = HttpRuntime.Cache == null ? new CacheHelper(new Cache()) : new CacheHelper(HttpRuntime.Cache); } /// /// Singleton accessor /// public static ApplicationContext Current { get; internal set; } /// /// Returns the application wide cache accessor /// /// /// Any caching that is done in the application (app wide) should be done through this property /// internal CacheHelper ApplicationCache { get; private set; } // IsReady is set to true by the boot manager once it has successfully booted // note - the original umbraco module checks on content.Instance in umbraco.dll // now, the boot task that setup the content store ensures that it is ready bool _isReady = false; readonly System.Threading.ManualResetEventSlim _isReadyEvent = new System.Threading.ManualResetEventSlim(false); public bool IsReady { get { return _isReady; } internal set { AssertIsNotReady(); _isReady = value; _isReadyEvent.Set(); } } public bool WaitForReady(int timeout) { return _isReadyEvent.WaitHandle.WaitOne(timeout); } // notes // GlobalSettings.ConfigurationStatus returns the value that's in the web.config, so it's the "configured version" // GlobalSettings.CurrentVersion returns the hard-coded "current version" // the system is configured if they match // if they don't, install runs, updates web.config (presumably) and updates GlobalSettings.ConfiguredStatus // // then there is Application["umbracoNeedConfiguration"] which makes no sense... getting rid of it... // public bool IsConfigured { // fixme - let's do this for the time being get { return Configured; } } private bool Configured { get { try { string configStatus = ConfigurationStatus; string currentVersion = GlobalSettings.CurrentVersion; if (currentVersion != configStatus) { LogHelper.Info("CurrentVersion different from configStatus: '" + currentVersion + "','" + configStatus + "'"); } return (configStatus == currentVersion); } catch { return false; } } } private string ConfigurationStatus { get { try { return ConfigurationManager.AppSettings["umbracoConfigurationStatus"]; } catch { return String.Empty; } } } private void AssertIsReady() { if (!this.IsReady) throw new Exception("ApplicationContext is not ready yet."); } private void AssertIsNotReady() { if (this.IsReady) throw new Exception("ApplicationContext has already been initialized."); } /// /// Gets the current DatabaseContext /// public DatabaseContext DatabaseContext { get { return DatabaseContext.Current; } } } }