我正在使用 RabbitMQ 在应用程序 (RPC) 之间进行通信,但我遇到了一个困境,不知道什么是调用我需要的方法的适当方法。我有一个类,其中包含一堆可用方法,我需要执行与 Rabbit 消息中携带的字符串相匹配的方法。
选项1: 使用所示方法HERE看起来更干净、更好看,但我想知道它是否有什么缺点。例如性能损失、不良实践等
var method = this.GetType().GetMethod(methodNameString);
method.Invoke(this, messagebody);
选项2: 使用开关
switch(methodNameString)
case: method1
method1();
case: method2
method2();
...
最佳答案
反射的事情没问题。反射比(常见)消息队列快得多。这极不可能成为性能瓶颈。
请记住,您允许消息生成者调用任何方法。如果生产者开始调用本应属于内部的内容,这可能是一个安全问题,或者是分层违规。
此外,系统的静态分析能力较差。例如,您无法通过执行“查找用法”来找出正在调用哪些方法。
我提到这一点是为了完整性。我认为这很可能是正确的方法。
关于c# - Method.Invoke() 与 switch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39733627/