File: UI\DeploymentSectionCache.cs
Project: ndp\fx\src\xsp\system\Extensions\System.Web.Extensions.csproj (System.Web.Extensions)
//------------------------------------------------------------------------------
// <copyright file="DeploymentSectionCache.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
 
namespace System.Web.UI {
    using System;
    using System.Configuration;
    using System.Security;
    using System.Security.Permissions;
    using System.Web.Configuration;
 
    // DeploymentSection can only be defined in machine.config, so it is safe to cache statically in the application
    internal sealed class DeploymentSectionCache : IDeploymentSection {
        private static readonly DeploymentSectionCache _instance = new DeploymentSectionCache();
        // Value is cached statically, because DeploymentSectionCache is a Singleton.
        private bool? _retail;
 
        private DeploymentSectionCache() {
        }
 
        public static DeploymentSectionCache Instance {
            get {
                return _instance;
            }
        }
 
        public bool Retail {
            get {
                if (_retail == null) {
                    _retail = GetRetailFromConfig();
                }
                return _retail.Value;
            }
        }
 
        [
        ConfigurationPermission(SecurityAction.Assert, Unrestricted = true),
        SecuritySafeCritical()
        ]
        private static bool GetRetailFromConfig() {
            DeploymentSection section = (DeploymentSection)WebConfigurationManager.GetSection("system.web/deployment");
            return section.Retail;
        }
    }
}