mirror of
https://github.com/chylex/.NET-Community-Toolkit.git
synced 2025-04-13 20:15:45 +02:00
Fix register/unregister issues of WeakReferenceMessenger
This commit is contained in:
parent
20ad4e505b
commit
1030a20fac
Microsoft.Toolkit.Mvvm/Messaging
UnitTests/UnitTests.Shared/Mvvm
@ -406,6 +406,8 @@ public bool MoveNext()
|
||||
|
||||
while (node is not null)
|
||||
{
|
||||
LinkedListNode<WeakReference<TKey>>? nextNode = node.Next;
|
||||
|
||||
// Get the key and value for the current node
|
||||
if (node.Value.TryGetTarget(out TKey? target) &&
|
||||
this.owner.table.TryGetValue(target!, out TValue? value))
|
||||
@ -421,7 +423,7 @@ public bool MoveNext()
|
||||
this.owner.keys.Remove(node);
|
||||
}
|
||||
|
||||
node = node.Next;
|
||||
node = nextNode;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -511,6 +511,29 @@ void Test()
|
||||
messenger.Cleanup();
|
||||
}
|
||||
|
||||
[TestCategory("Mvvm")]
|
||||
[TestMethod]
|
||||
[DataRow(typeof(StrongReferenceMessenger))]
|
||||
[DataRow(typeof(WeakReferenceMessenger))]
|
||||
public void Test_Messenger_RegisterMultiple_UnregisterSingle(Type type)
|
||||
{
|
||||
var messenger = (IMessenger)Activator.CreateInstance(type);
|
||||
|
||||
var recipient1 = new object();
|
||||
var recipient2 = new object();
|
||||
|
||||
int handlerCalledCount = 0;
|
||||
|
||||
messenger.Register<object, MessageA>(recipient1, (r, m) => { handlerCalledCount++; });
|
||||
messenger.Register<object, MessageA>(recipient2, (r, m) => { handlerCalledCount++; });
|
||||
|
||||
messenger.UnregisterAll(recipient2);
|
||||
|
||||
messenger.Send(new MessageA());
|
||||
|
||||
Assert.AreEqual(1, handlerCalledCount);
|
||||
}
|
||||
|
||||
public sealed class RecipientWithNoMessages
|
||||
{
|
||||
public int Number { get; set; }
|
||||
|
Loading…
Reference in New Issue
Block a user