Как мне сделать так, чтобы объект подписывался на чужое событие, оставляя эти два слабо связанными? - PullRequest
3 голосов
/ 01 ноября 2011

У меня есть следующие фрагменты кода, которые, на мой взгляд, кажутся простыми основами, необходимыми для реализации шаблона 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 ]

1 голос
/ 01 ноября 2011

Не используйте события, если вы хотите использовать слабо связанные сообщения, используйте 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 делает именно это.

1 голос
/ 01 ноября 2011

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

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

...