Files
Umbraco-CMS/src/Umbraco.Core/Configuration/UmbracoConfig.cs

171 lines
5.8 KiB
C#

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Threading;
using Umbraco.Core.Cache;
using Umbraco.Core.Configuration.BaseRest;
using Umbraco.Core.Configuration.Dashboard;
using Umbraco.Core.Configuration.Grid;
using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Core.Logging;
namespace Umbraco.Core.Configuration
{
/// <summary>
/// The gateway to all umbraco configuration
/// </summary>
public class UmbracoConfig
{
#region Singleton
private static readonly Lazy<UmbracoConfig> Lazy = new Lazy<UmbracoConfig>(() => new UmbracoConfig());
public static UmbracoConfig For
{
get { return Lazy.Value; }
}
#endregion
/// <summary>
/// Default constructor
/// </summary>
private UmbracoConfig()
{
if (_umbracoSettings == null)
{
var umbracoSettings = ConfigurationManager.GetSection("umbracoConfiguration/settings") as IUmbracoSettingsSection;
SetUmbracoSettings(umbracoSettings);
}
if (_baseRestExtensions == null)
{
var baseRestExtensions = ConfigurationManager.GetSection("umbracoConfiguration/BaseRestExtensions") as IBaseRestSection;
SetBaseRestExtensions(baseRestExtensions);
}
if (_dashboardSection == null)
{
var dashboardConfig = ConfigurationManager.GetSection("umbracoConfiguration/dashBoard") as IDashboardSection;
SetDashboardSettings(dashboardConfig);
}
}
/// <summary>
/// Constructor - can be used for testing
/// </summary>
/// <param name="umbracoSettings"></param>
/// <param name="baseRestSettings"></param>
/// <param name="dashboardSettings"></param>
public UmbracoConfig(IUmbracoSettingsSection umbracoSettings, IBaseRestSection baseRestSettings, IDashboardSection dashboardSettings)
{
SetUmbracoSettings(umbracoSettings);
SetBaseRestExtensions(baseRestSettings);
SetDashboardSettings(dashboardSettings);
}
private IDashboardSection _dashboardSection;
private IUmbracoSettingsSection _umbracoSettings;
private IBaseRestSection _baseRestExtensions;
private IGridConfig _gridConfig;
/// <summary>
/// Gets the IDashboardSection
/// </summary>
public IDashboardSection DashboardSettings()
{
if (_dashboardSection == null)
{
var ex = new ConfigurationErrorsException("Could not load the " + typeof(IDashboardSection) + " from config file, ensure the web.config and Dashboard.config files are formatted correctly");
LogHelper.Error<UmbracoConfig>("Config error", ex);
throw ex;
}
return _dashboardSection;
}
/// <summary>
/// Only for testing
/// </summary>
/// <param name="value"></param>
internal void SetDashboardSettings(IDashboardSection value)
{
_dashboardSection = value;
}
/// <summary>
/// Only for testing
/// </summary>
/// <param name="value"></param>
public void SetUmbracoSettings(IUmbracoSettingsSection value)
{
_umbracoSettings = value;
}
/// <summary>
/// Gets the IUmbracoSettings
/// </summary>
public IUmbracoSettingsSection UmbracoSettings()
{
if (_umbracoSettings == null)
{
var ex = new ConfigurationErrorsException("Could not load the " + typeof (IUmbracoSettingsSection) + " from config file, ensure the web.config and umbracoSettings.config files are formatted correctly");
LogHelper.Error<UmbracoConfig>("Config error", ex);
throw ex;
}
return _umbracoSettings;
}
/// <summary>
/// Only for testing
/// </summary>
/// <param name="value"></param>
public void SetBaseRestExtensions(IBaseRestSection value)
{
_baseRestExtensions = value;
}
/// <summary>
/// Gets the IBaseRestSection
/// </summary>
public IBaseRestSection BaseRestExtensions()
{
if (_baseRestExtensions == null)
{
var ex = new ConfigurationErrorsException("Could not load the " + typeof(IBaseRestSection) + " from config file, ensure the web.config and BaseRestExtensions.config files are formatted correctly");
LogHelper.Error<UmbracoConfig>("Config error", ex);
throw ex;
}
return _baseRestExtensions;
}
/// <summary>
/// Only for testing
/// </summary>
/// <param name="value"></param>
public void SetGridConfig(IGridConfig value)
{
_gridConfig = value;
}
/// <summary>
/// Gets the IGridConfig
/// </summary>
public IGridConfig GridConfig(ILogger logger, IRuntimeCacheProvider runtimeCache, DirectoryInfo appPlugins, DirectoryInfo configFolder, bool isDebug)
{
if (_gridConfig == null)
{
_gridConfig = new GridConfig(logger, runtimeCache, appPlugins, configFolder, isDebug);
}
return _gridConfig;
}
//TODO: Add other configurations here !
}
}