Что я хочу сделать, так это убедиться, что если единственная ссылка на моего наблюдателя является наблюдаемой, она собирает мусор и перестает получать сообщения.
Скажем, у меня есть элемент управления, в котором есть список, называемый "Сообщения" и этот код:
//Short lived display of messages (only while the user 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, который не будет управлять пользователем.