【发布时间】:2014-01-20 12:17:28
【问题描述】:
我正在使用波纹管类在 C# 应用程序中实现中介模式。我注意到,如果我有多个订阅者(对象)订阅了同一个事件,则只有其中一个接收到它。这是正常行为吗?我怎样才能让他们都收到它?
引发事件的主要对象
Mediator.NotifyColleagues("SetMyProject", MyProject);
通过下面一行订阅多个对象(类)
Mediator.Register("SetMyProject", SetMyProject);
中介类
static public class Mediator
{
static IDictionary<string, List<Action<object>>> pl_dict = new Dictionary<string, List<Action<object>>>();
static public void Register(string token, Action<object> callback)
{
if (!pl_dict.ContainsKey(token))
{
var list = new List<Action<object>>();
list.Add(callback);
pl_dict.Add(token, list);
}
else
{
bool found = false;
foreach (var item in pl_dict[token])
if (item.Method.ToString() == callback.Method.ToString())
found = true;
if (!found)
pl_dict[token].Add(callback);
}
}
static public void Unregister(string token, Action<object> callback)
{
if (pl_dict.ContainsKey(token))
pl_dict[token].Remove(callback);
}
static public void NotifyColleagues(string token, object args)
{
if (pl_dict.ContainsKey(token))
foreach (var callback in pl_dict[token])
callback(args);
}
}
【问题讨论】:
标签: c# design-patterns mediator