Skip to content

Commit 44cd26c

Browse files
committed
Attempt to handle inheritance, fail
1 parent f4177c8 commit 44cd26c

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

ReactiveUI.Tests/ActivationTest.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,19 @@ public ActivatingViewModel()
2626
}
2727
}
2828

29+
public class DerivedActivatingViewModel : ActivatingViewModel
30+
{
31+
public int IsActiveCountAlso { get; protected set; }
32+
33+
public DerivedActivatingViewModel()
34+
{
35+
Activator = this.WhenActivated(d => {
36+
IsActiveCountAlso++;
37+
d(Disposable.Create(() => IsActiveCountAlso--));
38+
});
39+
}
40+
}
41+
2942
public class ActivatingView : ReactiveObject, IViewFor<ActivatingViewModel>
3043
{
3144
ActivatingViewModel viewModel;
@@ -84,6 +97,26 @@ public void PreviousActivationsGetTrashedOnDoubleActivate()
8497
fixture.Activator.Deactivate();
8598
Assert.Equal(0, fixture.IsActiveCount);
8699
}
100+
101+
[Fact]
102+
public void DerivedActivationsDontGetStomped()
103+
{
104+
var fixture = new DerivedActivatingViewModel();
105+
Assert.Equal(0, fixture.IsActiveCount);
106+
Assert.Equal(0, fixture.IsActiveCountAlso);
107+
108+
fixture.Activator.Activate();
109+
Assert.Equal(1, fixture.IsActiveCount);
110+
Assert.Equal(1, fixture.IsActiveCountAlso);
111+
112+
fixture.Activator.Activate();
113+
Assert.Equal(1, fixture.IsActiveCount);
114+
Assert.Equal(1, fixture.IsActiveCountAlso);
115+
116+
fixture.Activator.Deactivate();
117+
Assert.Equal(0, fixture.IsActiveCount);
118+
Assert.Equal(0, fixture.IsActiveCountAlso);
119+
}
87120
}
88121

89122
public class ActivatingViewTests

ReactiveUI/Activation.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,31 @@ public static class ViewForMixins
4040
{
4141
public static ViewModelActivator WhenActivated(this ISupportsActivation This, Func<IEnumerable<IDisposable>> block)
4242
{
43-
return new ViewModelActivator(block);
43+
var activator = This.Activator;
44+
45+
return new ViewModelActivator(() =>{
46+
var list = block().ToList();
47+
48+
if (activator != null) {
49+
list.Add(activator.Activate());
50+
}
51+
52+
return list;
53+
});
4454
}
4555

4656
public static ViewModelActivator WhenActivated(this ISupportsActivation This, Action<Action<IDisposable>> block)
4757
{
58+
var activator = This.Activator;
59+
4860
return new ViewModelActivator(() => {
4961
var ret = new List<IDisposable>();
5062
block(ret.Add);
63+
64+
if (activator != null) {
65+
ret.Add(activator.Activate());
66+
}
67+
5168
return ret;
5269
});
5370
}

0 commit comments

Comments
 (0)