如何订阅事件

时间:2020-12-21 10:22:39

标签: c# .net events

我在使用接口 MessageDeserializerIDeserializer<DpdMessage> 类中创建了以下事件:

public event Action<int> OnUnsupportedMessage;

当我现在尝试通过将 IDeserializer<DpdMessage> 注入构造函数来订阅我的 Health 类中的事件时:

public Health(IDeserializer<DpdMessage> msg)
{
    _msg = msg;
    _msg.OnUnsupportedMessage += OnMessage;
}

我收到此错误:

<块引用>

错误 CS1061“IDeserializer”不包含“OnUnsupportedMessage”的定义,并且找不到接受“IDeserializer”类型的第一个参数的可访问扩展方法“OUnsupportedMessage”(您是否缺少 using 指令或程序集引用?)

我不能简单地将事件添加到界面中,因为它位于外部包中。

如何订阅我的活动?

2 个答案:

答案 0 :(得分:1)

您在 OnUnsupportedMessage 中定义了 MessageDeserializer,因此只有此类(或其子类)的实例才会具有此事件。

如果您无法控制 IDeserializer<DpdMessage> 接口,您可以尝试将其转换为您的类:

if (msg is MessageDeserializer m)
    m.OnUnsupportedMessage += OnMessage;

答案 1 :(得分:0)

您可以通过声明自己的接口来扩展接口,以添加您需要的事件功能。如果您执行了类似于以下代码的操作,则可以注入此接口,而不是从外部包中注入的接口。

 httpHeaders.set("keyvalue","keyvalue");
   httpHeaders.add("keyvalue","keyvalue");