2011-10-31 40 views
3

我有以下几段代码,在我看来,它们似乎是实现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中会有大量的非相关控件 - 只需订阅即可。这是标准吗?我应该做一些不同的事情吗?

感谢

回答

1

如果你想要松散耦合的消息不要使用事件,使用EventAggragator。 Caliburn.Micro有一个体面的。

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

一种EventAggregator是一个中介类型模式,它使发布者和订阅通过中介工作,因此使松耦合相互作用。发布者和订阅者不需要彼此了解。

查找使用“弱引用”来解决事件类型模式(即GC内存泄漏)的经典问题的EventAggregator。 Caliburn正是如此。

相关问题