using System; using System.Collections.Generic; namespace Game { public class MetaDataHandler { private readonly Dictionary> _metaDataDict= new Dictionary>(); protected virtual void OnCreateBind() { } protected void CreateBind() { OnCreateBind(); } protected void ClearBind() { foreach (var kvp in _metaDataDict) { var metaData = kvp.Key; foreach (var handler in kvp.Value) { metaData.RemoveEvent(handler); } } _metaDataDict.Clear(); } protected void ReBindData(MetaBase metaData, EventMetaData handler) { UnbindData(metaData); BindData(metaData, handler); } protected void BindData(MetaBase metaData, EventMetaData handler) { metaData.AddEvent(handler); var metaInter = (IMetaData)metaData; if (!_metaDataDict.ContainsKey(metaInter)) { _metaDataDict[metaInter] = new List(); } _metaDataDict[metaInter].Add(handler); } protected void UnbindData(MetaBase metaData) { var metaInter = (IMetaData)metaData; if (_metaDataDict.ContainsKey(metaInter)) { foreach (var handler in _metaDataDict[metaInter]) { metaData.RemoveEvent(handler); } _metaDataDict[metaInter].Clear(); } _metaDataDict.Remove(metaInter); } } }