作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我当前的项目中大量使用反射来极大地简化我的 Controller 和 wcf 服务之间的通信。我现在想做的是从无法直接访问 HttpSessionStateBase(即:不是 Controller )的对象中的 Session 获取值。例如,一个 View 模型。我可以传入它或传递对它的引用等,但这在我的情况下不是最佳选择。
由于在我的场景中的某个时刻,所有内容都来自 Controller ,因此我可以执行以下操作,将麻袋带到调用发起的 Controller ,非常简单的事情:
var trace = new System.Diagnostics.StackTrace();foreach (var frame in trace.GetFrames()){ var type = frame.GetMethod().DeclaringType; var prop = type.GetProperty("Session"); if(prop != null) { // not sure about this part... var value = prop.GetValue(type, null); break; }}
这里的问题是我似乎无法弄清楚如何获取 Controller 的“实例”或 session 属性以便我可以从中读取。
最佳答案
这是不可能的。将参数传递给方法的方式是一个实现细节,留给了 JIT 编译器。例如,x86 和 x64 之间非常不同。 x86 在堆栈上传递参数,x64 通过寄存器传递前 4 个参数。浮点值在 FPU 堆栈或 SSE 寄存器上传递。等等。
调试器通过使用 JIT 编译器生成的调试信息了解细节。但是在程序中使用调试接口(interface)是行不通的,程序不能 self 调试。
关于C# 反射 StackTrace 获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2438552/
我是一名优秀的程序员,十分优秀!