我正在处理非常旧的代码,这里的耦合在GOD级别上。因此,我需要以某种方式获取调用属性设置程序的调用方的名称。
我真的投入了时间来寻找解决方案,我也尝试了堆栈框架来获得方法的名称。 From this answer
例如
[System.Xml.Serialization.XmlElementAttribute("orOperatorAppendixed", Form = XmlSchemaForm.Qualified)]
public bool OrOperatorAppendixed
{
get { return orOperatorAppendixed; }
set
{
StackTrace stackTrace = new StackTrace(); // get call stack
StackFrame[] stackFrames = stackTrace.GetFrames(); // get method calls (frames)
// write call stack method names
foreach (StackFrame stackFrame in stackFrames)
{
Console.WriteLine(stackFrame.GetMethod().Name); // write method name
}
orOperatorAppendixed = value;
}
}
有人呼叫该设置器时,控制台消息如下所示:
set_OrOperatorAppendixed
Read52_Condition
Read53_Alarm
Read77_Pip
Read152_Window
Read152_Window
Read159_Layout
Read160_layout
InvokeMethod
UnsafeInvokeInternal
Invoke
InvokeReader
Deserialize
Deserialize
FromXml
layoutReceived
processData
dataReceived
dataReceived
Complete
CompleteCallback
RunInternal
Run
Run
Complete
ProtectedInvokeCallback
CompletionPortCallback
PerformIOCompletionCallback
基本上,我认为这些方法名称是运行时级别的方法。所以我想说的是,我想要项目中函数的调用者名称,特别是该项目的开发人员编写的调用该属性设置器的方法。
此外,我已经阅读了有关 [CallerMemberName] string callername =“” 的信息,但是您需要将CallerMemberName设置为参数,并且我具有属性,所以我不能这样做。>
所以我希望你理解我的核心问题是什么。也许有办法解决我的问题。
谢谢