1212
1313namespace ReactiveUI
1414{
15- public class ViewModelActivator
15+ public sealed class ViewModelActivator
1616 {
17- readonly Func < IEnumerable < IDisposable > > block ;
17+ readonly List < Func < IEnumerable < IDisposable > > > blocks ;
1818 IDisposable activationHandle = Disposable . Empty ;
1919
20- public ViewModelActivator ( Func < IEnumerable < IDisposable > > block )
20+ public ViewModelActivator ( )
2121 {
22- this . block = block ;
22+ blocks = new List < Func < IEnumerable < IDisposable > > > ( ) ;
23+ }
24+
25+ internal void addActivationBlock ( Func < IEnumerable < IDisposable > > block )
26+ {
27+ blocks . Add ( block ) ;
2328 }
2429
2530 public IDisposable Activate ( )
2631 {
27- var disp = new CompositeDisposable ( block ( ) ) ;
28- Interlocked . Exchange ( ref activationHandle , disp ) . Dispose ( ) ;
32+ var disp = new CompositeDisposable ( blocks . SelectMany ( x => x ( ) ) ) ;
2933
34+ Interlocked . Exchange ( ref activationHandle , disp ) . Dispose ( ) ;
3035 return Disposable . Create ( Deactivate ) ;
3136 }
3237
@@ -38,33 +43,16 @@ public void Deactivate()
3843
3944 public static class ViewForMixins
4045 {
41- public static ViewModelActivator WhenActivated ( this ISupportsActivation This , Func < IEnumerable < IDisposable > > block )
46+ public static void WhenActivated ( this ISupportsActivation This , Func < IEnumerable < IDisposable > > block )
4247 {
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- } ) ;
48+ This . Activator . addActivationBlock ( block ) ;
5449 }
5550
56- public static ViewModelActivator WhenActivated ( this ISupportsActivation This , Action < Action < IDisposable > > block )
51+ public static void WhenActivated ( this ISupportsActivation This , Action < Action < IDisposable > > block )
5752 {
58- var activator = This . Activator ;
59-
60- return new ViewModelActivator ( ( ) => {
53+ This . Activator . addActivationBlock ( ( ) => {
6154 var ret = new List < IDisposable > ( ) ;
6255 block ( ret . Add ) ;
63-
64- if ( activator != null ) {
65- ret . Add ( activator . Activate ( ) ) ;
66- }
67-
6856 return ret ;
6957 } ) ;
7058 }
0 commit comments