2009-06-02 6 views
1

Une tâche de routine récurrente que je souhaite résoudre à l'aide de PostSharp est l'abonnement à un événement et l'ajout de collection. Je voudrais inscrire la procédure d'objet parent à l'événement de chaque objet enfant (les enfants sont contenus dans une liste). Je voudrais également ajouter toutes les listes du parent à une liste principale sur le parent. Quel aspec shuld je utilise ou dans quelle direction devrais-je penser?PostSharp - automatisation de l'ajout et de la collecte d'événements

exemple du problème décrit ci-dessus est indiqué ci-dessous ...

je l'interface suivante:

public interface ITraceable 
{ 
    IList Children {get;set;} 
    ChangeStatus Status {get;set;} 
    bool IsTraceEnabled {get;set;} 
    event EventHandler ChangeHandler 
} 

Avec les types de statut folowing:

public enum ChangeStatus 
{ 
    New, 
    Modified, 
    Added, 
    Deleted 
} 

La structure et la mise en œuvre de ce qui précède est:

public class Entity : ITraceable 
{ 
    public event EventHandler {get;set;} 
    public IList Children {get;set;} 
    public ChangeStatus Status {get;set;} 
    public bool IsTraceEnabled {get;set;} 

    public string Name {get;set;} 
    public string Address {get;set;} 
    public string Title {get;set;} 
    public List<ChildEntity1> ChildEntities {get;set;} 
    public List<ChildEntity2> ChildEntities {get;set;} 

    public void SubscribeableSub(object sender, EventArgs e) 
    { 
     Console.WriteLine("Test"); 
    } 
} 

public class ChildEntity1 : ITraceable 
{ 
    public event EventHandler {get;set;} 
    public IList Children {get;set;} 
    public ChangeStatus Status {get;set;} 
    public bool IsTraceEnabled {get;set;} 

    public string Name1 {get;set;} 
    public string Address1 {get;set;} 
    public string Title1 {get;set;} 
} 

public class ChildEntity2 : ITraceable 
{ 
    public event EventHandler {get;set;} 
    public IList Children {get;set;} 
    public ChangeStatus Status {get;set;} 
    public bool IsTraceEnabled {get;set;} 

    public string Name2 {get;set;} 
    public string Address2 {get;set;} 
    public string Title2 {get;set;} 
} 

Merci à advandce pour toute assistance

Répondre

0

j'utiliser le schéma suivant:

  1. Utilisez une collection personnalisée (par exemple hériter de collection). Substituez InsertItem et abonnez-vous aux événements enfants à partir de là. Le constructeur de la collection prend le parent comme paramètre. Donc, pas besoin de PostSharp ici.

  2. Vous pouvez utiliser PostSharp pour implémenter automatiquement certains événements, par exemple PropertyChanged (INotifyPropertyChanged). Voir l'exemple PostSharp.Samples.Binding pour plus de détails.

-gael

Questions connexes