1

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;
    }

}

したがって、さまざまなサブスクライバーは、タイプ Action で自分自身を追加します。私が理解しているように、元のページ/オブジェクトへの参照が常に存在するため、元のページ/オブジェクトがガベージ コレクションされるのを防ぐことができます (そうでないと思いますか?)。

私は実際にサブスクライブを解除することはできません。また、常にそうであるとは限りません。メッセージング キューは、アプリケーションの存続期間中そのままです。

WeakReferences を実装する必要がありますか?

WeakReferences はオーバーヘッドを追加しますか?

使用中のメモリが小さいため、これを考慮することさえ狂っていますか?

4

1 に答える 1

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

于 2010-07-28T11:31:33.273 に答える