Messenger.cs 926 B

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