56 lines
3.4 KiB
Markdown
56 lines
3.4 KiB
Markdown
|
|
---
|
||
|
|
source_files:
|
||
|
|
- Common/DTS.Common.Core/Config/DTSConfig.cs
|
||
|
|
generated_at: "2026-04-17T16:08:08.424741+00:00"
|
||
|
|
model: "zai-org/GLM-5-FP8"
|
||
|
|
schema_version: 1
|
||
|
|
sha256: "20e6632b3b560005"
|
||
|
|
---
|
||
|
|
|
||
|
|
# Config
|
||
|
|
|
||
|
|
### Purpose
|
||
|
|
Provides centralized, thread-safe access to an alternate configuration file for the application. This module exists to allow the system to read settings and configuration sections from a dynamically-specified config file path rather than the default application configuration, supporting scenarios where configuration needs to be externalized or swapped at runtime.
|
||
|
|
|
||
|
|
### Public Interface
|
||
|
|
|
||
|
|
**`DTSConfig` (static class)**
|
||
|
|
|
||
|
|
- `static void DTSConfigInit(string path)` — Initializes the configuration system with the specified config file path. Internally calls `SetAltConfigPath`.
|
||
|
|
|
||
|
|
- `static void AltConfigPathSet(string path)` — Thread-safe setter for the alternate config file path. Acquires lock on `MyLock` before assigning.
|
||
|
|
|
||
|
|
- `static string AltConfigPathGet()` — Thread-safe getter for the alternate config file path. Acquires lock on `MyLock` before returning.
|
||
|
|
|
||
|
|
- `static void SetAltConfigPath(string path)` — Sets the alternate config path and opens the mapped configuration file. If `path` is null or empty, falls back to `DTSConstants.CustomConfigPath`. Creates a new `Configuration` object via `ConfigurationManager.OpenMappedExeConfiguration`.
|
||
|
|
|
||
|
|
- `static Configuration GetAltConfig()` — Thread-safe getter returning the current `Configuration` object for the alternate config file.
|
||
|
|
|
||
|
|
- `static string GetAppSetting(string key)` — Retrieves an app setting value by key from the alternate configuration. Returns `string.Empty` if the key is not found (logs a message via `APILogger.Log` in that case).
|
||
|
|
|
||
|
|
- `static object GetSection(string sectionName)` — Retrieves a configuration section by name from the alternate configuration. Returns `null` if the section is not found (logs a message via `APILogger.Log` in that case).
|
||
|
|
|
||
|
|
### Invariants
|
||
|
|
|
||
|
|
- All access to static fields (`AltConfigPath`, `AltConfig`) is protected by a lock on `MyLock` for thread safety.
|
||
|
|
- `SetAltConfigPath` must be called before `GetAppSetting` or `GetSection` can return meaningful results; otherwise, `AltConfig` may be null.
|
||
|
|
- `GetAppSetting` always returns a non-null string (empty string if key not found).
|
||
|
|
- `GetSection` may return null if the section does not exist.
|
||
|
|
|
||
|
|
### Dependencies
|
||
|
|
|
||
|
|
**Depends on:**
|
||
|
|
- `DTS.Common.Utilities.Logging` (uses `APILogger.Log`)
|
||
|
|
- `System.Configuration` (uses `Configuration`, `ConfigurationManager`, `ExeConfigurationFileMap`, `KeyValueConfigurationElement`, `ConfigurationUserLevel`)
|
||
|
|
- `DTSConstants.CustomConfigPath` (referenced constant, defined elsewhere in the codebase)
|
||
|
|
|
||
|
|
**Dependents:** Unknown from source alone.
|
||
|
|
|
||
|
|
### Gotchas
|
||
|
|
|
||
|
|
- The static constructor is empty, meaning `AltConfig` is not initialized until `SetAltConfigPath` is explicitly called. Calling `GetAppSetting` or `GetSection` before initialization will result in a `NullReferenceException`.
|
||
|
|
- `DTSConfigInit` and `SetAltConfigPath` appear to be redundant; `DTSConfigInit` simply delegates to `SetAltConfigPath` with no additional logic.
|
||
|
|
- `AltConfigPathGet` and `AltConfigPathSet` are separate methods rather than a property, which is unconventional for C#.
|
||
|
|
- The `GetAppSetting` method uses LINQ to cast and search settings, which is less efficient than using the `AppSettings.Settings[key]` indexer, but handles the case where the key might not exist gracefully.
|
||
|
|
|
||
|
|
---
|