Как реализовать события через интерфейс в C #? - PullRequest
13 голосов
/ 21 января 2009

У меня проблема: представьте, у меня есть система на основе плагинов.

Мне нужен какой-то интерфейс, с помощью которого я мог бы перехватывать события из каждого плагина, который реализует, например, интерфейс IReporting.

(IReporting) object.OnSomeEvent += <.....>

Но я не могу найти способ сделать это.

1 Ответ

31 голосов
/ 21 января 2009

Вместо (IReporting) obj.XXX вы должны написать ((IReporting) obj) .XXX

public interface IFoo
{
    event EventHandler Boo;
}

class Foo : IFoo
{
    public event EventHandler Boo;
    public void RaiseBoo()
    {
        if (Boo != null)
            Boo(this, EventArgs.Empty);
    }
}

...

private void TestClass_Boo(object sender, EventArgs e)
{
    throw new NotImplementedException();
}

    ...

   object o = new Foo();
   ((IFoo)o).Boo += TestClass_Boo;
   ((Foo)o).RaiseBoo();

Что касается инфраструктуры плагинов, взгляните на существующие решения с хорошей архитектурой, например, MEF

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...