Страницы

Поиск по вопросам

вторник, 16 июля 2019 г.

Реализация контроллера в шаблоне MVC

Могу ли я реализовать в своём контроллере событие? Где я должен буду подписать другой/другие контролеры на это событие? Противоречит ли это самому шаблону?


Ответ

Все контроллеры внутри приложения унаследовать от ControllerBase класса, внутри него создать статический dispatcher, невидимый в классах наследниках, наружу оставить видимые методы для подписки и отписки слушателей + отправка событий. пример кода, отсюда, очень советую почитать код не проверялся, используйте как набросок class ControllerBase { public delegate void AlarmEventHandler(object sender, EventArgs e); public static event AlarmEventHandler Alarm;
public void addEventListener(EventListenerClass c) { AlarmEventHandler aeh = new AlarmEventHandler(c.eventListenerMethod); saveAlarmEventHandler(aeh); // Save Alarm += aeh; }
public void removeEventListener(EventListenerClass c) { AlarmEventHandler aeh = getAlarmEventHandler(c.eventListenerMethod); // Get Alarm -= aeh; }
public void OnEvent(AlarmEventArgs e) { AlarmEventHandler handler = Alarm; if (handler != null) { // Invokes the delegates. handler(this, e); } }
} помните, если контроллер динамический, то он должен сам "чистить" слушатели при удалении и еще, то что все контроллеры "видят" глобальные события, есть очень не гуд, можно долго рассказывать, но это существенный подводный камень, как вариант делают некий глобальный контекст который сам диспетчеризует все события и дает их видеть только нужным контроллерам

Комментариев нет:

Отправить комментарий