我可能完全误解了RX的全部内容,但我认为这将是一种简洁的方式,允许我的代码中的各种客户端应用程序订阅某些实体框架代码优先类型。用RX订阅EF更改
所以在我的UOW提交methood我
var changes = DbContext.ChangeTracker.Entries<EntEvent>().Where(ee => ee.State != EntityState.Unchanged);
Hub.Instance.NotifyBeforeSave(changes);
和我的(而不是基本的)集线器类看起来像这样...
public sealed class Hub
{
private static readonly Hub instance = new Hub();
static Hub(){}
private Hub(){}
public static Hub Instance
{
get { return instance; }
}
public IObservable<System.Data.Entity.Infrastructure.DbEntityEntry<EntEvent>> BeforeSave = new Subject<DbEntityEntry<EntEvent>>();
public void NotifyBeforeSave<T>(IEnumerable<System.Data.Entity.Infrastructure.DbEntityEntry<T>> changes) where T:class
{
var x = changes.Where(c => typeof(T) == typeof(EntEvent)) as IEnumerable<System.Data.Entity.Infrastructure.DbEntityEntry<EntEvent>>;
BeforeSave = x.ToObservable();
}
}
,然后我想我可以订阅一个客户端(观察者)通过创建以下的实例并调用attach来实现。
public class SampleConsumer : IObserver<DbEntityEntry<EntEvent>>
{
public void attach()
{
Hub.Instance.BeforeSave.Subscribe(this);
}
public void OnNext(DbEntityEntry<EntEvent> value)
{
var x = value;
}
public void OnError(Exception error)
{
var y = error;
}
public void OnCompleted()
{
}
}
但OnNext和OnError中的断点永远不会被调用。
我可能距离我应该的地方180度,但我们必须从某个地方开始!
是的,我一直在阅读有关热/冷最后晚。我想我希望能够有一种方法,在被调用时将IEnumerable推入一个可观察的事件中。 – Andiih
我想问题是DBContext是短命的,而我需要的订阅是长期存在的,因此消费者可以订阅的集线器的想法一个长期存在的Observable和创造者可以将事件推入其中。这甚至有可能吗? – Andiih