2015-08-24 10 views
0

Класс1 имеет событие с атрибутом [EventPublication ("event1")]. Class2 и Class3 наследуются от Class1.Подписка на события и наследование Opennetcf.IOC

Я хочу подписаться Method1 на событие в объекте из Class2 и Method2 на событие в объекте класса 3 с помощью [EventSubscription].

Но в производных классах существует одно и то же имя события EventPublication. Итак, как отличить события от производных классов? Является ли это возможным?

EDIT: Может быть, я неправильно некоторые очевидные вещи о IoC или я пытаюсь усложнить простое решение ... я попытаюсь прояснить мой вопрос. Вот какой-то код:

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"); 
    } 
} 

Есть методы action1() и action2() в другом классе. Я хотел бы запустить action1(), когда вызывается экземпляр метода Presenter1 Run() и срабатывает action2(), когда вызывается экземпляр метода Presenter2 Run(). Но вызов метода Run() приведет к срабатыванию обоих методов action1 и action2.

ответ

0

Я не уверен, что я понимаю вопрос. Существует два конца агрегирования событий, издателя и подписчика. Они «подключены» к имени строки, которое вы используете в атрибуте, и ничего больше.

Подписка может быть выполнена в том же классе, что и публикация, хотя мне непонятно, почему вы это делали, просто попросите базовый класс использовать виртуальный метод, который производные классы реализуют, и вы закончили ,

Если вы хотите использовать событие, и вы хотите знать, если исходный экземпляр события не экземпляр приемника, просто проверить входной параметр источника мероприятия против this, что-то вдоль этих линий:

[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

я добавил некоторые редактируют вопрос. – raV720