我在c#中使用事件作爲發佈者/訂閱者模式。不過,我不知道我的程序將使用多少個發佈商。我想直接動態地將事件添加到類中,或者更加合理地將事件添加到包含事件的集合/字典中。事件收集
這兩種情況都可能使用C#嗎?
我在c#中使用事件作爲發佈者/訂閱者模式。不過,我不知道我的程序將使用多少個發佈商。我想直接動態地將事件添加到類中,或者更加合理地將事件添加到包含事件的集合/字典中。事件收集
這兩種情況都可能使用C#嗎?
創建您的發佈者發佈並且您的訂閱者訂閱的介體。例如:
public class Mediator
{
public static readonly Mediator Current = new Mediator();
public event EventHandler<EventArgs> EventRaised;
public void RaiseEvent(object sender, EventArgs eventArgs)
{
if (EventRaised!=null)
EventRaised(sender, eventArgs);
}
}
public class PublisherEventArgs : EventArgs
{
public string SomeData { get; set; }
}
public class Publisher
{
public void Publish(string data)
{
Mediator.Current.RaiseEvent(this, new PublisherEventArgs() { SomeData = data});
}
}
public class Subscriber
{
public Subscriber()
{
Mediator.Current.EventRaised += HandlePublishedEvent;
}
private void HandlePublishedEvent(object sender, EventArgs e)
{
if(e is PublisherEventArgs)
{
string data = ((PublisherEventArgs)e).SomeData;
// todo: do something here
}
}
}
確保你對你的用戶實現IDisposable(它不是在我的例子),以便它在處置從中保退訂。
爲了做到這一點,您需要斷開該事件的來源。這通常通過事件聚合器完成;它管理想要發佈事件的客戶以及想要訂閱事件的客戶。所有這些將發佈者從聽衆中分離出來,並允許你做你正在描述的內容。
Prism has an event aggregator開箱即用,您可以使用IEventAggregator
接口的形式。
你能發表一些代碼嗎? –
可能重複的[在C#中的事件數組?](http://stackoverflow.com/questions/987050/array-of-events-in-c) –
如果你在設計時不知道,那麼你不會在運行時也知道。我只能想象你倒退了,你不知道會有多少訂閱者參加一個活動。 –