J'ai une classe de base pour toutes mes collections d'entités personnalisées, une version simple est la suivante:Y a-t-il un événement OnDeserialized ou similaire afin que je puisse déterminer qu'une classe a été désérialisée?
[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();
}
}
Les collections sont assis dans une classe sérialisée qui se trouve dans Session
(c.-à-classe client en session a une collection d'entités de commande). Le problème est que l'événement MadeDirty de ma classe de base de l'entité est la suivante:
[field: NonSerialized()]
public event EventHandler MadeDirty;
Malheureusement, je ne peux pas simplement supprimer l'attribut NonSerialized
sur l'événement, car cela provoque des problèmes dans le serveur d'état de session lorsqu'il est déployé sur mon serveur d'applications.
Est-il possible de capturer un événement d'achèvement désérialisé sur CollectionBase afin que je puisse parcourir tous les éléments et réaffecter l'événement MadeDirty
à chaque désérialisation de la session? C'est à dire. Mais, je ne peux pas m'imaginer que ce soit la première fois que quelqu'un rencontre ce problème, alors existe-t-il une meilleure alternative?
Merci beaucoup Henk. Spot sur! – GenericTypeTea