New test.
[mono.git] / mcs / class / System.Web / System.Web.Configuration_2.0 / WebConfigurationManager.cs
index e7f4f93fbdb2aef07a1a3c3b783a7a3e02b71f5a..fd87f12d0854ce5c5c70fb91d6e32237c9e1e52b 100644 (file)
@@ -43,8 +43,56 @@ namespace System.Web.Configuration {
 
        public static class WebConfigurationManager
        {
+#if !TARGET_J2EE
                static IInternalConfigConfigurationFactory configFactory;
                static Hashtable configurations = new Hashtable ();
+#else
+        static internal IInternalConfigConfigurationFactory configFactory
+        {
+            get{
+                IInternalConfigConfigurationFactory factory = (IInternalConfigConfigurationFactory)AppDomain.CurrentDomain.GetData("WebConfigurationManager.configFactory");
+                if (factory == null){
+                    lock (AppDomain.CurrentDomain){
+                        object initialized = AppDomain.CurrentDomain.GetData("WebConfigurationManager.configFactory.initialized");
+                        if (initialized == null){
+                            PropertyInfo prop = typeof(ConfigurationManager).GetProperty("ConfigurationFactory", BindingFlags.Static | BindingFlags.NonPublic);
+                            if (prop != null){
+                                factory = prop.GetValue(null, null) as IInternalConfigConfigurationFactory;
+                                configFactory = factory;
+                            }
+                        }
+                    }
+                }
+                return factory != null ? factory : configFactory;
+            }
+            set{
+                AppDomain.CurrentDomain.SetData("WebConfigurationManager.configFactory", value);
+                AppDomain.CurrentDomain.SetData("WebConfigurationManager.configFactory.initialized", true);
+            }
+        }
+
+        static internal Hashtable configurations
+        {
+            get{
+                Hashtable table = (Hashtable)AppDomain.CurrentDomain.GetData("WebConfigurationManager.configurations");
+                if (table == null){
+                    lock (AppDomain.CurrentDomain){
+                        object initialized = AppDomain.CurrentDomain.GetData("WebConfigurationManager.configurations.initialized");
+                        if (initialized == null){
+                            table = new Hashtable();
+                            configurations = table;
+                        }
+                    }
+                }
+                return table != null ? table : configurations;
+
+            }
+            set{
+                AppDomain.CurrentDomain.SetData("WebConfigurationManager.configurations", value);
+                AppDomain.CurrentDomain.SetData("WebConfigurationManager.configurations.initialized", true);
+            }
+        }
+#endif
                
                static WebConfigurationManager ()
                {
@@ -239,9 +287,13 @@ namespace System.Web.Configuration {
                public static object GetWebApplicationSection (string sectionName)
                {
                        _Configuration config = GetWebApplicationConfiguration ();
+                       if (config == null)
+                               return null;
 
                        ConfigurationSection section = config.GetSection (sectionName);
-
+                       if (section == null)
+                               return null;
+                       
                        return get_runtime_object.Invoke (section, new object [0]);
                }
 
@@ -299,10 +351,19 @@ namespace System.Web.Configuration {
 
                static private Web20DefaultConfig config {
                        get {
-                               return (Web20DefaultConfig)AppDomain.CurrentDomain.GetData("WebConfigurationManager.config");
+                               return (Web20DefaultConfig) AppDomain.CurrentDomain.GetData ("Web20DefaultConfig.config");
+                       }
+                       set {
+                               AppDomain.CurrentDomain.SetData ("Web20DefaultConfig.config", value);
+                       }
+               }
+
+               static private IInternalConfigSystem configSystem {
+                       get {
+                               return (IInternalConfigSystem) AppDomain.CurrentDomain.GetData ("IInternalConfigSystem.configSystem");
                        }
                        set {
-                               AppDomain.CurrentDomain.SetData("WebConfigurationManager.config", value);
+                               AppDomain.CurrentDomain.SetData ("IInternalConfigSystem.configSystem", value);
                        }
                }
 #else