我可以在没有调用类的类对象的情况下订阅侦听器吗?

时间:2019-07-17 10:33:06

标签: c# events .net-core event-handling

根据tutorial from microsoft,我想object of the class时需要一个listen to a event(C#.NET Core 2.2)

在没有调用对象实例的情况下是否可以实现?

我的情况是我在listener上有RabbitMQ听。当数据输入时,我通过很长的对象处理数据。

在此处进行描述:

Object a创建新的Object b并传递数据,Object b创建Object c并传递数据,...,Object z正在保存数据。来自Object a的我的监听器中的RabbidMQ。 我需要了解保存在Object z上的信息(有效,无效,部分有效)。

将我的回复信息重新发送到Object a的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

  

您发布的代码

这很简单Event Handler,它是委托的包装,可以使它订阅任何数量的方法(Multi Cast delegate),而方法是使用事件中的所有方法调用事件时都将触发该方法。通过通知所有侦听器来执行链。

  

这种代码什么时候起作用

它只能在process / memory内部工作,而不能在整个过程中工作,这意味着您不能跨网络调用或跨过程边界的呼叫订阅通知,因为这需要序列化/反序列化,即使您可以序列化对象/数据并重新创建,但不进行订阅逻辑/函数调用/逻辑处理

  

您的问题?

我不确定我是否掌握了所有内容,但是根据我的理解,您已经订阅了Rabbit MQ,当有新数据传入时,它确实会通知您的代码,这是它们在网络上的客户端和服务器代码。 ,所有其他对象AZ都位于同一内存中,那么您需要做的就是将Event对象传递给所有相关对象,因为委托在内部的行为类似于函数指针,因此您可以在任何地方执行它,直到该点对象成为有效,它将执行与您期望的方法相同的方法,但是您需要传递相同的对象,如果状态很重要,则不能创建新对象并期望它维护状态。如果状态不是问题,则可以从任何地方创建对象,尽管通常在这种情况下状态是相关的。

  

针对整个网络

在MS世界中,Signal R存在,但是有多种实现方式,例如Rabbit MQ,它们都提供了钩子来通过网络通知任何订户