在C#属性中确定设置器的调用者

时间:2019-02-06 10:07:54

标签: c# .net wpf

我正在处理非常旧的代码,这里的耦合在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设置为参数,并且我具有属性,所以我不能这样做。

所以我希望你理解我的核心问题是什么。也许有办法解决我的问题。

谢谢

0 个答案:

没有答案