2 回答
TA贡献1880条经验 获得超4个赞
你可以使用泛型委托(有类型Action<T>或者Func<T, TResult>如果你需要从委托检索结果)。
您可以在此问题或文档中找到更多信息
class MessageListener<T> where T : BaseDto {
public void GetMessage<T>(Action<T> action)
{
}
MessageListener<T>(string queueToListen)
{
}
}
TA贡献1744条经验 获得超4个赞
AFunc<T, TResult>是返回结果的委托。您会想要使用Action<T>,它不会返回结果。您的泛型类型参数Action<T>必须与您将传递的方法的签名相匹配。
通常,当使用来自消息队列的消息时,您将有一个侦听器类为该消息队列包装客户端,并且您将在侦听器中处理 MessageReceived 事件(我是笼统地说 - 我没有专门与 RabbitMQ 合作)。所以你的听众可能看起来像这样(伪代码):
class MessageListener<T> where T : BaseDto {
var _client = new QueueClient();
MessageListener<T>(string queueToListen, Action<T> onMessageReceived)
{
_client = new QueueClient("<your_connection_string>", queueToListen);
_client.MessageReceived += onMessageReceived;
}
}
用法将是这样的:
BillingService bs = new BillingService();
var listener = new MessageListener<BillingOperationRequestDto>("myQueue", bs.CheckBillingStatus);
- 2 回答
- 0 关注
- 300 浏览
添加回答
举报