我想知道我是否可以在 EasyNetQ 中以类似于多态发布订阅的方式进行多态请求响应
这是一个使用 Mike Hadlow 的示例和Cat
s 和Dog
s 的示例(查看上面的链接),但使用Animal
的是类而不是接口。我正在尝试做类似的事情:
Animal d = new Dog();
bus.Request<Animal, string>(d);
如果在接收端我有以下内容,
bus.Respond<Dog, string>(...);
请求永远不会被响应者捕获,因为它是作为Animal
而不是Dog
.
这里的要点是请求并不真正关心它发送的内容(除了它发送的事实Animal
)并且输入来自系统的不同部分,因此我无法提前知道确切的类型。将有不同的侦听器来响应不同的子类(一个侦听器为Dog
,另一个为Cat
),所以我不能只听Animal
请求。TResponse
不管TRequest
.
有没有办法做一些相当于多态发布-订阅的事情?例如,类似:
bus.Request<string>(d.getType(), d);
提前非常感谢!
编辑:更多信息:
目前在我的代码库中,我使用 (extension) 方法,以便根据我仅在运行时知道bus.Publish(msg.GetType(), msg);
的实例类型将消息正确路由到正确的侦听器。msg
这允许我通过提供相同的函数调用(无代码流分支)作为发布不同类型消息的方式来避免代码bus.Publish<Dog>(msg)
重复bus.Publish<Cat>(msg);
。我也想使用非泛型bus.Request()
方法,并像 一样使用它,以避免像 in一样bus.Request(msg.GetType(), string.GetType(), msg)
多次调用此方法。希望我可以避免这样做:在运行时调用泛型方法。bus.Request<Dog, string>(msg)
bus.Request<Cat, string>(msg);