我可能完全誤解了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