Как мне сделать так, чтобы объект подписывался на чужое событие, оставляя эти два слабо связанными?
У меня есть следующие фрагменты кода, которые, на мой взгляд, кажутся простыми основами, необходимыми для реализации шаблона 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 имеет приличный.
EventAggregator - это шаблон типа Mediator, который позволяет издателям и подписчикам работать через посредника, что позволяет использовать слабосвязанное взаимодействие. Издателям и подписчикам не нужно знать друг о друге.
Ищите EventAggregator, который использует "Weak Refereneces" для преодоления классической проблемы с шаблонами типов событий, то есть утечками памяти GC. Caliburn делает именно это.
Используйте слабосвязанный механизм событий, такой как EventAggregator
http://msdn.microsoft.com/en-us/library/ff921122(PandP.20).aspx