ISubject <T> setupSubjectIfNecessary <T>(string contract) { ISubject <T> ret = null; withMessageBus(typeof(T), contract, (mb, tuple) => { NotAWeakReference subjRef; if (mb.TryGetValue(tuple, out subjRef) && subjRef.IsAlive) { ret = (ISubject <T>)subjRef.Target; return; } ret = new ScheduledSubject <T>(getScheduler(tuple), null, new BehaviorSubject <T>(default(T))); mb[tuple] = new NotAWeakReference(ret); }); return(ret); }
ISubject <T> setupSubjectIfNecessary <T>(string contract, IScheduler scheduler) { scheduler = scheduler ?? RxApp.DeferredScheduler; ISubject <T> ret = null; NotAWeakReference subjRef = null; withMessageBus(typeof(T), contract, (mb, tuple) => { if (mb.TryGetValue(tuple, out subjRef) && subjRef.IsAlive) { ret = (ISubject <T>)subjRef.Target; return; } ret = new ScheduledSubject <T>(scheduler); mb[tuple] = new NotAWeakReference(ret); }); return(ret); }