Сообщения Silverlight WP7, должен ли я использовать WeakReference, и если да, то как? - PullRequest
1 голос
/ 28 июля 2010

Я создаю простую систему обмена сообщениями для приложения Windows Phone Silverlight.

Идея состоит в том, что различные страницы 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 голосов
/ 28 июля 2010

Инструментарий 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

...