コード例 #1
0
        /// <summary>
        /// Sets the current <see cref="System.Configuration.Internal.IInternalConfigSystem"/> to be used by <see cref="ConfigurationManager"/>.
        /// </summary>
        /// <remarks>
        /// íf <paramref name="configSystem"/> implements <see cref="IChainableConfigSystem"/>, this method invokes
        /// <see cref="IChainableConfigSystem.SetInnerConfigurationSystem"/> on the new configSystem to chain them.<br/>
        /// <b> Note, that this method requires reflection on internals of <see cref="ConfigurationManager"/></b>
        /// </remarks>
        /// <param name="configSystem">the configuration system to set</param>
        /// <param name="enforce">bypasses the check if the current system has already been initialized</param>
        /// <returns>the previous config system, if any</returns>
        public static System.Configuration.Internal.IInternalConfigSystem SetConfigurationSystem(System.Configuration.Internal.IInternalConfigSystem configSystem, bool enforce)
        {
            FieldInfo s_configSystem = typeof(ConfigurationManager).GetField("s_configSystem", BindingFlags.Static | BindingFlags.NonPublic);

            // for MONO
            if (s_configSystem == null)
            {
                s_configSystem = typeof(ConfigurationManager).GetField("configSystem", BindingFlags.Static | BindingFlags.NonPublic);
            }
            System.Configuration.Internal.IInternalConfigSystem innerConfigSystem = (System.Configuration.Internal.IInternalConfigSystem)s_configSystem.GetValue(null);
            if (configSystem is IChainableConfigSystem)
            {
                ((IChainableConfigSystem)configSystem).SetInnerConfigurationSystem(innerConfigSystem);
            }

            try
            {
                MethodInfo mi = typeof(ConfigurationManager).GetMethod("SetConfigurationSystem", BindingFlags.Static | BindingFlags.NonPublic);
                if (mi == null)
                {
                    mi = typeof(ConfigurationManager).GetMethod("ChangeConfigurationSystem", BindingFlags.Static | BindingFlags.NonPublic);
                    mi.Invoke(null, new object[] { configSystem });
                }
                else
                {
                    if (enforce)
                    {
                        ResetConfigurationSystem();
                    }
                    mi.Invoke(null, new object[] { configSystem, true });
                }
            }
            catch (InvalidOperationException)
            {
                if (!enforce)
                {
                    throw;
                }
                s_configSystem.SetValue(null, configSystem);
            }

            return(innerConfigSystem);
        }
コード例 #2
0
 public ConnectionStringPatcherConfigSystem(System.Configuration.Internal.IInternalConfigSystem internalConfigSystem)
 {
     this.internalConfigSystem = internalConfigSystem;
 }
コード例 #3
0
 public ConnectionStringPatcherConfigSystem(System.Configuration.Internal.IInternalConfigSystem internalConfigSystem) {
     this.internalConfigSystem = internalConfigSystem;
 }