using PdmSwPlugin.Common.Entity; using PdmSwPlugin.Common.Util.Xml; using System; using System.IO; using System.Linq; using System.Reflection; namespace PdmSwPlugin.Common.Setting { public class YwtUserSetting : NotifyBase { public static YwtUserSetting Instance { get; private set; } private string _SwFilePath; public string SwFilePath { get => _SwFilePath; set => RaiseAndSetIfChanged(ref _SwFilePath, value); } private YwtUserSetting() { } private static string GetSettingPath() { string dllPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string settingPath = Path.Combine(dllPath, "UserSetting", "YwtUserSetting.xml"); return settingPath; } private static YwtUserSetting LoadFromXml() { string settingPath = GetSettingPath(); if (!File.Exists(settingPath)) { return new YwtUserSetting(); } try { return XmlUtil.ReadFromXml(settingPath); } catch (Exception e) { return new YwtUserSetting(); } } public bool SaveToXml(out string ErrMsg) { ErrMsg = null; string settingPath = GetSettingPath(); string settingDir = Path.GetDirectoryName(settingPath); if (!Directory.Exists(settingDir)) { Directory.CreateDirectory(settingDir); } XmlUtil.WriteToXml(settingPath, this); return true; } public static YwtUserSetting Load(bool force) { if (Instance == null || force) { YwtUserSetting setting = LoadFromXml(); var props = setting.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public).ToList(); foreach (var prop in props) { string name = prop.Name; var oldValue = prop.GetValue(setting); if (oldValue == null) { string value = PluginSetting.Instance[name]; prop.SetValue(setting, value); } } Instance = setting; } return Instance; } } }