Silverlight WP7消息传递,我应该使用WeakReference,如果是这样的话怎么样?

时间:2010-07-27 22:27:24

标签: silverlight messaging windows-phone-7 weak-references

我正在为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会增加更多开销吗?

我是否因为使用的内存很小而感到疯狂?

1 个答案:

答案 0 :(得分:0)

MVVM Light工具包有一个非常好的松耦合消息传递总线,它可用于WP7 http://www.galasoft.ch/mvvm/getstarted/

你可能需要这个: http://blog.galasoft.ch/archive/2010/07/22/mvvm-light-hotfix-for-windows-phone-7-developer-tools-beta.aspx