Как мне сделать так, чтобы объект подписывался на чужое событие, оставляя эти два слабо связанными?

У меня есть следующие фрагменты кода, которые, на мой взгляд, кажутся простыми основами, необходимыми для реализации шаблона Observer. Это стандарт или я что то не так делаю?

public class LayoutManager
{
    public CormantTimer Timer { get; set; }
}

protected void Page_Init(object sender, EventArgs e)
{
    LayoutManager.Instance.Timer = RefreshAndCycleTimer;
}

public class CormantRadDock : RadDock, ICormantControl<RadDockSetting>
{
    public CormantRadDock()
    {
        LayoutManager.Instance.Timer.TimerEvent += DoTimerRefreshTick;
    }
}

Объекты CormantRadDock создаются динамически. RefreshAndCycleTimer находится на странице.

Я беспокоюсь о том, что по мере роста моего проекта в LayoutManager будет большое количество не связанных элементов управления - только для подписки. Это стандарт? Должен ли я делать что-то другое?

Спасибо

2 ответа

Решение

Не используйте события, если вы хотите использовать слабо связанные сообщения, используйте EventAggragator. Caliburn.Micro имеет приличный.

http://devlicio.us/blogs/rob_eisenberg/archive/2011/05/30/caliburn-micro-soup-to-nuts-part-8-the-eventaggregator.aspx

EventAggregator - это шаблон типа Mediator, который позволяет издателям и подписчикам работать через посредника, что позволяет использовать слабосвязанное взаимодействие. Издателям и подписчикам не нужно знать друг о друге.

Ищите EventAggregator, который использует "Weak Refereneces" для преодоления классической проблемы с шаблонами типов событий, то есть утечками памяти GC. Caliburn делает именно это.

Используйте слабосвязанный механизм событий, такой как EventAggregator

http://msdn.microsoft.com/en-us/library/ff921122(PandP.20).aspx

Другие вопросы по тегам