Что я хочу сделать, так это убедиться, что если единственной ссылкой на моего наблюдателя является наблюдаемая, он получает мусор и прекращает прием сообщений.
Скажем, у меня есть элемент управления со списком, который называется «Сообщения», и этот код:
//Short lived display of messages (only while the user's viewing incoming messages)
public partial class MessageDisplay : UserControl
{
public MessageDisplay()
{
InitializeComponent();
MySource.IncomingMessages.Subscribe(m => Messages.Items.Add(m));
}
}
Который подключается к этому источнику:
//Long lived location for message store
static class MySource
{
public readonly static IObservable<string> IncomingMessages = new ReplaySubject<string>;
}
Чего я не хочу, так это чтобы дисплей сообщений оставался в памяти надолго после того, как он больше не виден. В идеале я хотел бы немного расширения, чтобы я мог написать:
MySource.IncomingMessages.ToWeakObservable().Subscribe(m => Messages.Items.Add(m));
Я также не хочу полагаться на тот факт, что MessageDisplay является пользовательским элементом управления, так как позже я захочу перейти к установке MVVM с MessageDisplayViewModel, которая не будет пользовательским элементом управления.