using System; using System.Collections.Generic; namespace Model { [ObjectEvent] public class ConfigComponentEvent : ObjectEvent, IAwake, ILoad { public void Awake() { this.Get().Awake(); } public void Load() { this.Get().Load(); } } /// /// Config组件会扫描所有的有ConfigAttribute标签的配置,加载进来 /// public class ConfigComponent: Component { private Dictionary allConfig; public void Awake() { this.Load(); } public void Load() { this.allConfig = new Dictionary(); Type[] types = DllHelper.GetMonoTypes(); foreach (Type type in types) { object[] attrs = type.GetCustomAttributes(typeof (ConfigAttribute), false); if (attrs.Length == 0) { continue; } object obj = Activator.CreateInstance(type); ICategory iCategory = obj as ICategory; if (iCategory == null) { throw new Exception($"class: {type.Name} not inherit from ACategory"); } iCategory.BeginInit(); iCategory.EndInit(); this.allConfig[iCategory.ConfigType] = iCategory; } } public T GetOne() where T : AConfig { Type type = typeof (T); ICategory configCategory; if (!this.allConfig.TryGetValue(type, out configCategory)) { throw new Exception($"ConfigComponent not found key: {type.FullName}"); } return ((ACategory) configCategory).GetOne(); } public T Get(long id) where T : AConfig { Type type = typeof (T); ICategory configCategory; if (!this.allConfig.TryGetValue(type, out configCategory)) { throw new Exception($"ConfigComponent not found key: {type.FullName}"); } return ((ACategory) configCategory)[id]; } public T TryGet(int id) where T : AConfig { Type type = typeof (T); ICategory configCategory; if (!this.allConfig.TryGetValue(type, out configCategory)) { return default(T); } return ((ACategory) configCategory).TryGet(id); } public T[] GetAll() where T : AConfig { Type type = typeof (T); ICategory configCategory; if (!this.allConfig.TryGetValue(type, out configCategory)) { throw new Exception($"ConfigComponent not found key: {type.FullName}"); } return ((ACategory) configCategory).GetAll(); } public T GetCategory() where T : class, ICategory, new() { T t = new T(); Type type = t.ConfigType; ICategory configCategory; bool ret = this.allConfig.TryGetValue(type, out configCategory); return ret? (T)configCategory : null; } } }