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