这不难创造。
您只需要一个 internalDictionary<Type, Object>
并使用它来存储每个Subject<T>
(作为对象)按Type
.
然后,您可以只编写两个Subscribe
和Publish
方法来处理内部字典。
其实应该很简单。
与其说它很简单,我想我会试一试。
这是我的 Rx Pub/Sub 类:
public static class RxPS
{
private static Dictionary<Type, object> _subjects
= new Dictionary<Type, object>();
public static IDisposable Subscribe<T>(Action<T> observer)
{
lock(_subjects)
{
if (!_subjects.ContainsKey(typeof(T)))
{
_subjects.Add(typeof(T), new Subject<T>());
}
return (_subjects[typeof(T)] as Subject<T>)
.Subscribe(observer);
}
}
public static void Publish<T>(T item)
{
lock(_subjects)
{
if (_subjects.ContainsKey(typeof(T)))
{
(_subjects[typeof(T)] as Subject<T>)
.OnNext(item);
}
}
}
}
这就是它的使用方式:
RxPS.Publish(1);
var d = RxPS.Subscribe<int>(x => Console.WriteLine(x));
RxPS.Publish(2);
d.Dispose();
RxPS.Publish(3);
结果是此代码将2
仅写入控制台。
享受!