Messenger.cs 951 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Reflection;
  7. /// <summary>
  8. /// 消息发布订阅(非线程安全)
  9. /// </summary>
  10. public class Messenger
  11. {
  12. public static Messenger Defalut = new Messenger();
  13. //支持重复key的字典
  14. Dictionary<string, List<dynamic>> cache = new Dictionary<string, List<dynamic>>();
  15. private Messenger()
  16. {
  17. }
  18. public void Sub<T>(string key, Action<T> act)
  19. {
  20. if (!cache.ContainsKey(key))
  21. cache.Add(key, new List<dynamic>());
  22. cache[key].Add(act);
  23. }
  24. public void Pub<T>(string key, T data)
  25. {
  26. if (cache.TryGetValue(key, out List<dynamic> list))
  27. {
  28. foreach (var item in list)
  29. {
  30. if (item is Action<T> act)
  31. {
  32. act?.Invoke(data);
  33. }
  34. }
  35. }
  36. }
  37. }