2012-03-16 80 views
3

我有一个类,处理发送&通过我的应用程序和网络之间的套接字接收。该类使用其他类,包括低级别的sockket连接类和创建要发送和处理收到的数据的消息的PDU处理程序类。在运行时自动生成自定义事件

现在我使用一个事件来告诉我的类低级连接类有数据,我需要将该数据发送到PDU处理程序以转换为应用程序可以使用的信息,然后将数据传递给应用程序。

对于未来的使用,我试图让该类尽可能通用,以便在未来的服务器/客户端项目中,我将只需要更改PDU处理程序,以考虑可用的新操作以及如何处理数据。

所有这一切都在进行中,现在我正面临将数据交还给应用程序的问题。为此,我的逻辑方法是让应用程序知道数据已准备好收集的事件。对此,我可以:

一)有一个事件,让应用程序理清它是通过操作码(可行) 二)什么样的信息有每个操作代码的一个事件,并有应用订阅所有他们因而知道在启动时它是什么让

考虑使事情一般的想法,并在b规定的做法,是有办法dinamicly创建基于在运行时给定的委托签名事件?

e。 G。 想象你在叫MyOperation1和MyOperation2枚举操作码和您已经定义了一个委托,如:

public delegate void PDUEventHandler(ParamType Param, [...]); 

,我想定义事件称为:

public event PDUEventHandler MyOperation1; 
public event PDUEventHandler MyOperation2; 

但是,如果我添加一个新的操作码我将需要一个事件。

此事件是否可以创建或者我需要手工完成? 如果我需要手工完成,那么我想单个事件会更好,并处理应用程序的一面。

+0

我认为你应该选择A并使用像Chain of Responsibility(http://www.dofactory.com/Patterns/PatternChain.aspx)这样的模式来处理事件,也许使用MEF(http:// msdn .microsoft.com/en-us/library/dd460648.aspx)加载将处理每种操作代码的对象。 – Fabio 2012-03-16 13:56:23

+0

有趣的框架 - 不知道它 - 将不得不考虑它 - 虽然每个处理程序有1个类(在我的情况下操作)似乎过度 - 会看得更深入 - 谢谢 – 537mfb 2012-03-16 15:20:29

回答

1

也许你需要的是一个回调 - 实际上你传递给事件处理器一个委托,以便在处理器完成时执行它。 Here's a stackoverflow thread to give you an idea

在事件处理方面&再使用性,也许你可以扩展的EventArgs,并有代表作为属性。

编辑:

我在想有共同的代码并在自定义代码运行一个“洞”一单PDUEventHandler。该自定义代码作为委托(即方法)或甚至是类实例传递给处理程序。但让我们改变这一点...

听起来像你需要一个factory。实际上你实际上是在描述一个工厂。

概念上放弃将特殊操作码本身传递到EventHandler本身或具有多重签名PDUEventHandler s的想法。

创建一个PDUHandlerFactory类。工厂返回一个定制的实例作为通用的PDUHandler类参考。然后,代替PDUEventHander,调用者拥有指向工厂自定义实例的PDUHandler引用。

+0

对不起 - 不太明白你的意思 - 实质上,c#事件是回调 - 所以这就是我所说的 - 如果你的意思是发送一个委托给那个被提出的事件比我们回到应用程序需要注册n个事件与我的主类和那个班级需要知道将其连接到哪个操作 - 或者你理解你错了? – 537mfb 2012-03-16 15:26:31

+0

工厂的想法可能是要走的路 - 将不得不考虑它 - 没有在工厂与soooo长期合作 - 谢谢 – 537mfb 2012-03-21 12:50:37