You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| 
 | |
| namespace Game
 | |
| {
 | |
|     public class MetaDataHandler
 | |
|     {
 | |
|         private readonly Dictionary<IMetaData, List<Delegate>> _metaDataDict= new Dictionary<IMetaData, List<Delegate>>();
 | |
|         
 | |
|         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<TData>(MetaBase<TData> metaData, EventMetaData<TData> handler)
 | |
|         {
 | |
|             UnbindData(metaData);
 | |
|             BindData(metaData, handler);
 | |
|         }
 | |
|         protected void BindData<TData>(MetaBase<TData> metaData, EventMetaData<TData> handler)
 | |
|         {
 | |
|             metaData.AddEvent(handler);
 | |
|             var metaInter = (IMetaData)metaData;
 | |
|             if (!_metaDataDict.ContainsKey(metaInter))
 | |
|             {
 | |
|                 _metaDataDict[metaInter] = new List<Delegate>();
 | |
|             }
 | |
|             _metaDataDict[metaInter].Add(handler);
 | |
|         }
 | |
|         protected void UnbindData<TData>(MetaBase<TData> metaData)
 | |
|         {
 | |
|             var metaInter = (IMetaData)metaData;
 | |
|             if (_metaDataDict.ContainsKey(metaInter))
 | |
|             {
 | |
|                 foreach (var handler in _metaDataDict[metaInter])
 | |
|                 {
 | |
|                     metaData.RemoveEvent(handler);
 | |
|                 }
 | |
|                 _metaDataDict[metaInter].Clear();
 | |
|             }
 | |
|             _metaDataDict.Remove(metaInter);
 | |
|         }
 | |
|     }
 | |
| } |