我正在为windows phone silverlight app创建一个简单的消息系统。
这个想法是各种xaml页面&其他对象将订阅消息传递对象,传递他们想要接收/处理的消息类型以及Action<>委派为处理程序。
当一个动作发生时,一条消息(带有效载荷)将被发送给正确的订户。
以下是我想要的消息类快速草稿。
public class MessageBus
{
private List<Subscriber> subscribers;
public MessageBus()
{
subscribers = new List<Subscriber>();
}
public void Subscribe(string messageType, Action<object>subscriber){
subscribers.Add(new Subscriber(messageType, subscriber));
}
public void SendMessage(object message, string messageType)
{
foreach (Subscriber subscriber in subscribers)
{
if (subscriber.MessageType == messageType && subscriber.Reciever != null)
{
subscriber.Reciever(message);
}
}
}
}
public class Subscriber
{
public string MessageType { get; set; }
public Action<object> Reciever { get; set; }
public Subscriber(string messageType, Action<Object> reciever)
{
MessageType = messageType;
Reciever = reciever;
}
}
因此varius订阅者将使用类型Action添加自己。据我所知,这将阻止原始页面/对象被垃圾收集(我认为不会这样?)因为对它的引用将始终存在。
我无法取消订阅,或者总是无论如何,消息队列将在应用程序的生命周期内保持不变。
我应该实现WeakReferences,如果是,如何实现?
WeakReferences会增加更多开销吗?
我是否因为使用的内存很小而感到疯狂?