Главная страница   /   19.3. Взаимодействие с шиной выделенной области (ASP.NET MVC 4 в действии

ASP.NET MVC 4 в действии

ASP.NET MVC 4 в действии

Джеффри Палермо

19.3. Взаимодействие с шиной выделенной области

Примеры, которые мы рассматривали до настоящего времени, решали некоторые конкретные проблемы. Эти примеры были способны принять небольшие входные данные от хост-приложения и обеспечить некоторые полезные преимущества. В большинстве случаев выделенной области необходимо программно взаимодействовать с хост-приложением, и вместо того, чтобы оставить создание метода взаимодействия за каждым из разработчиков, в MvcContrib проект встроен простой, но эффективный механизм: шина сообщений. Шина была создана для того, чтобы позволить механизму синхронной передаче отправлять и принимать сообщения, которые определяет выделенная область. Далее мы пройдемся по примеру использования шины сообщений.

Пример использования шины сообщений MvcContrib

В качестве примера давайте будем использовать область RssWidget из предыдущего раздела. Эта область всего лишь предоставляла пользовательский интерфейс для отображения RSS-новости, но не предоставляла никакого механизма для извлечения данных из новости. Шина позволяет выполнять поиск данных и отправлять их обратно в область для отображения.

Давайте рассмотрим то, как сообщение отправляется из выделенной области. Ниже представлен вызов, необходимый для отправки сообщения вдоль шины:

MvcContrib.Bus.Send(new RssWidgetRenderedMessage{Url = RssUrl});

Данный пример демонстрирует то, как однонаправленное сообщение отправляется в приложение, указывая на регистрацию намерений.

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

MvcContrib.Bus.AddMessageHandler(typeof(RssMessageHandler));

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

Более интересный код – это класс RssMessageHandler. Каждый обработчик сообщения должен быть реализован в хост-приложении. Обработчики должны предполагать код интеграции, который переплетает вместе выделенную область и хост-приложение. Это означает, что код обработчика должен быть минимизирован, и что он полагается на сервисные классы приложения, а не на реализацию логики внутри класса обработчика.

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

Листинг 19-11: Класс обработчика сообщений
using MvcContrib.PortableAreas;
using RssWidgetPortableArea.Controllers;
namespace RssWidgetPortableArea
{
	public class RssMessageHandler : MessageHandler<RssWidgetRenderedMessage>
	{
		public override void Handle(RssWidgetRenderedMessage message)
		{
			//log the message to the applications log.
		}
	}
}

Внутри метода Handler вы можете реализовать обращения к сервисам и хранилищу данных вашего приложения.