我已經得到了我所有的自定義實體的集合基類,它的一個簡單的版本是這樣的:有沒有OnDeserialized事件或類似的,所以我可以確定一個類已被反序列化?
[Serializable]
public class CollectionBase<T> : List<T> where T : IEntity
{
public bool IsDirty {get;}
public new void Add(T item)
{
this.SetDirty();
base.Add(item);
item.MadeDirty += new EventHandler(item_MadeDirty);
}
// Other standard list methods overridden here
...
public void SetDirty() { } // Mark the collection as dirty
private void item_MadeDirty(object sender, EventArgs e)
{
this.SetDirty();
}
}
藏品坐的是坐落在Session
(即客戶類會話序列化類中有一個訂單實體的集合)。問題是,我的實體基類的MadeDirty事件如下:
[field: NonSerialized()]
public event EventHandler MadeDirty;
不幸的是,我不能只是刪除對事件NonSerialized
屬性,因爲在部署到我的應用程序服務器這會導致會話狀態服務器的問題。
是否有任何方法可以捕獲CollectionBase上的反序列化完成事件,以便我可以遍歷所有項目並重新分配來自Session的每個反序列化的MadeDirty
事件?即
private void OnDeserialized(object sender, EventArgs e)
{
foreach (T item in this)
{
item.MadeDirty+= new EventHandler(item_MadeDirty);
}
}
但是,我無法想象這是第一次有人遇到這個問題,那麼有沒有更好的選擇?
非常感謝亨克。發現! – GenericTypeTea 2010-06-08 16:39:17