<PackageReference Include="System.Configuration.ConfigurationManager" Version="8.0.0" />

UpdateConfigHost

using System.Collections.Specialized; using System.Configuration.Internal; using System.IO; namespace System.Configuration { internal sealed class UpdateConfigHost : DelegatingConfigHost { private HybridDictionary _streams; internal UpdateConfigHost(IInternalConfigHost host) { base.Host = host; } internal void AddStreamname(string oldStreamname, string newStreamname, bool alwaysIntercept) { if (!string.IsNullOrEmpty(oldStreamname) && (alwaysIntercept || !StringUtil.EqualsIgnoreCase(oldStreamname, newStreamname))) { if (_streams == null) _streams = new HybridDictionary(true); _streams[oldStreamname] = new StreamUpdate(newStreamname); } } internal string GetNewStreamname(string oldStreamname) { StreamUpdate streamUpdate = GetStreamUpdate(oldStreamname, false); if (streamUpdate == null) return oldStreamname; return streamUpdate.NewStreamname; } private StreamUpdate GetStreamUpdate(string oldStreamname, bool alwaysIntercept) { if (_streams == null) return null; StreamUpdate streamUpdate = (StreamUpdate)_streams[oldStreamname]; if (streamUpdate != null && !alwaysIntercept && !streamUpdate.WriteCompleted) streamUpdate = null; return streamUpdate; } public override object GetStreamVersion(string streamName) { StreamUpdate streamUpdate = GetStreamUpdate(streamName, false); if (streamUpdate == null) return base.Host.GetStreamVersion(streamName); return InternalConfigHost.StaticGetStreamVersion(streamUpdate.NewStreamname); } public override Stream OpenStreamForRead(string streamName) { StreamUpdate streamUpdate = GetStreamUpdate(streamName, false); if (streamUpdate == null) return base.Host.OpenStreamForRead(streamName); return InternalConfigHost.StaticOpenStreamForRead(streamUpdate.NewStreamname); } public override Stream OpenStreamForWrite(string streamName, string templateStreamName, ref object writeContext) { StreamUpdate streamUpdate = GetStreamUpdate(streamName, true); if (streamUpdate != null) return InternalConfigHost.StaticOpenStreamForWrite(streamUpdate.NewStreamname, templateStreamName, ref writeContext); return base.Host.OpenStreamForWrite(streamName, templateStreamName, ref writeContext); } public override void WriteCompleted(string streamName, bool success, object writeContext) { StreamUpdate streamUpdate = GetStreamUpdate(streamName, true); if (streamUpdate != null) { InternalConfigHost.StaticWriteCompleted(streamUpdate.NewStreamname, success, writeContext); if (success) streamUpdate.WriteCompleted = true; } else base.Host.WriteCompleted(streamName, success, writeContext); } public override bool IsConfigRecordRequired(string configPath) { return true; } public override void DeleteStream(string streamName) { StreamUpdate streamUpdate = GetStreamUpdate(streamName, false); if (streamUpdate != null) InternalConfigHost.StaticDeleteStream(streamUpdate.NewStreamname); else base.Host.DeleteStream(streamName); } public override bool IsFile(string streamName) { StreamUpdate streamUpdate = GetStreamUpdate(streamName, false); if (streamUpdate == null) return base.Host.IsFile(streamName); return InternalConfigHost.StaticIsFile(streamUpdate.NewStreamname); } } }