1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Reflection;
- /// <summary>
- /// 消息发布订阅(非线程安全)
- /// </summary>
- public class Messenger
- {
- public static Messenger Defalut = new Messenger();
- //支持重复key的字典
- Dictionary<string, List<dynamic>> cache = new Dictionary<string, List<dynamic>>();
- private Messenger()
- {
- }
- public void Sub<T>(string key, Action<T> act)
- {
- if (!cache.ContainsKey(key))
- cache.Add(key, new List<dynamic>());
- cache[key].Add(act);
- }
- public void UnSub<T>(string key, Action<T> act)
- {
- if (cache.ContainsKey(key))
- {
- var items = cache[key].Skip(0).ToList();
- foreach (var item in items)
- {
- if (item is Action<T> actExist)
- {
- cache[key].Remove(actExist);
- }
- }
- }
- }
- public void Pub<T>(string key, T data)
- {
- if (cache.TryGetValue(key, out List<dynamic> list))
- {
- foreach (var item in list)
- {
- if (item is Action<T> act)
- {
- act?.Invoke(data);
- }
- }
- }
- }
- }
|