using System.IO; using Microsoft.Extensions.Configuration; using SheetMe.Data.Config; namespace SheetMe.Designer.Services; /// /// appsettings → DataConfig 바인딩 로더. /// 우선순위: 환경변수 > appsettings.Development.json > appsettings.json. /// 커밋되는 appsettings.json 은 __HOST__ 류 플레이스홀더만 담으며, 실접속 정보는 /// appsettings.Development.json(개발, Debug 빌드에서만 산출물 복사) 또는 환경변수로 주입한다. /// public static class ConfigLoader { #region Methods /// 설정 로드 — 설정이 없으면 기본값(File 모드) public static DataConfig Load() { var config = new DataConfig(); var basePath = AppContext.BaseDirectory; var root = new ConfigurationBuilder() .SetBasePath(basePath) .AddJsonFile("appsettings.json", optional: true) .AddJsonFile("appsettings.Development.json", optional: true) .AddEnvironmentVariables() .Build(); var connectionString = root.GetConnectionString("His") ?? string.Empty; config.ConnectionString = IsPlaceholder(connectionString) ? string.Empty : connectionString; config.Provider = root["His:Provider"] ?? "Oracle"; config.SaveMode = root["FormStore:SaveMode"] ?? "File"; config.XmlFolder = root["FormStore:XmlFolder"] ?? "forms"; return config; } /// /// 커밋본의 미치환 플레이스홀더인지 — 이 경우 '미설정'으로 간주해 DB 기능을 끈다. /// 플레이스홀더를 그대로 접속에 쓰면 무의미한 연결 실패 예외가 사용자에게 노출된다. /// private static bool IsPlaceholder(string connectionString) => connectionString.Length == 0 || connectionString.Contains("__", StringComparison.Ordinal); #endregion }