2015-08-24 1 views
0

Class1 a un événement avec l'attribut [EventPublication ("event1")]. Class2 et Class3 héritent de Class1. Je souhaite souscrire Method1 à un événement dans un objet de Class2 et Method2 à un événement dans un objet de Class3 en utilisant [EventSubscription].Opennetcf.IOC, enregistrement d'événement et héritage

Mais dans les classes dérivées, il existe le même nom EventPublication de l'événement. Alors, comment distinguer les événements dans les classes dérivées? C'est possible?

EDIT: Peut-être que j'ai mal compris certaines choses évidentes sur IoC ou j'essaie de compliquer solution simple ... Je vais essayer de clarifier ma question. Voici un code:

class BasePresenter 
{ 
    [EventPublication("event")] 
    public event Action action; 

    public void Run() 
    { 
     someAction(); 

     if (action != null) 
      action(); 
    } 

    protected virtual void someAction() 
    { 

    } 
} 

class Presenter1 : BasePresenter 
{ 
    protected override void someAction() 
    { 

    } 
} 

class Presenter2 : BasePresenter 
{ 
    protected override void someAction() 
    { 

    } 
} 

class AnotherClass 
{ 
    [EventSubscription("event", ThreadOption.Caller)] 
    public void action1() 
    { 
     System.Windows.Forms.MessageBox.Show("Presenter1 started"); 
    } 

    [EventSubscription("event", ThreadOption.Caller)] 
    public void action2() 
    { 
     System.Windows.Forms.MessageBox.Show("Presenter2 started"); 
    } 
} 

Il existe des méthodes action1() et action2() dans une autre classe. Je voudrais déclencher action1() lorsque l'instance de la méthode Presenter1 Run() est appelée et déclencher action2() lorsque l'instance de la méthode Presenter2 Run() est appelée. Mais appeler la méthode Run() lancera les deux méthodes action1 et action2.

Répondre

0

Je ne suis pas certain de comprendre la question. L'agrégation d'événements comporte deux extrémités: un éditeur et un abonné. Ils sont "connectés" par le nom de l'événement de chaîne que vous utilisez dans l'attribut et rien d'autre.

Un abonnement peut être fait dans la même classe que la publication, bien que je ne comprenne pas pourquoi vous le feriez, il suffit que la classe de base appelle une méthode virtuelle que les classes dérivées implémentent et que vous avez terminé .

Si vous voulez utiliser des événements et vous voulez savoir si l'instance de source d'événement n'est pas l'instance récepteur, il suffit de vérifier le paramètre d'entrée source de l'événement contre this, quelque chose le long de ces lignes:

[EventSubscription("myevent")] 
public void OnEvent(object sender, EventArgs a) 
{ 
    if(sender.Equals(this)) return; 

    // do stuff here - the event came from another class instance 
} 
+0

J'ai ajouté quelques modifications à la question. – raV720