public static IDisposable When <T>(Action <T> when, bool includeTracing = true) where T : class { var eventsObserver = new ImmediateEventsObserver(); Action <ISystemEvent> onEvent = @event => { var type = @event as T; if (type != null) { when(type); } }; eventsObserver.Event += onEvent; var list = new List <IObserver <ISystemEvent> > { eventsObserver }; if (includeTracing) { list.Add(new ImmediateTracingObserver()); } var old = SystemObserver.Swap(list.ToArray()); return(new Disposable(() => { SystemObserver.Swap(old); eventsObserver.Event -= onEvent; })); }
public static IDisposable When <T>(Action <T> when, bool includeTracing = true) where T : class { var observer = new EventsObserver(@event => { var type1 = @event as T; if (type1 != null) { when(type1); } if (includeTracing) { Trace.WriteLine(@event); } }); var old = SystemObserver.Swap(new IObserver <ISystemEvent>[] { observer }); return(new Disposable(() => SystemObserver.Swap(old))); }