我想通过 Fody / MethodTimer 记录我的方法的执行时间。
我无法仅传递方法参数的某些属性(属于类类型)。
我的方法:
[Time("'{obj}'")]
private static void testFody(TestClass obj)
运行此代码时,出现以下错误:
无法处理'System.Void TestCurrentEPCIS.Program :: testFody(TestCurrentEPCIS.TestClass)' 因为格式使用的'obj.EventId'不能作为方法使用 参数。
当我按如下方式传递对象本身时,它将obj.ToString()传递给Interceptor类:
{{1}}
如何将obj参数的某些属性传递给Interceptor?
答案 0 :(得分:1)
根据documentation,当前不支持此功能:
注意1:不支持子属性。
Weaver通过属性仅支持两种类型的参数:
允许以下值:
- 任何参数名称(例如{fileName})
- {this}((在实例本身上调用ToString())。请注意,这在静态方法上不可用,如果 用于静态方法
(强调我的)
您似乎唯一可以做的就是将属性包含在覆盖的ToString
方法中。
Weaver是开源的。如果有时间可以专用于此,则可以考虑分叉项目并进行必要的更新。一个不错的起点似乎是ParameterFormattingProcessor类,它使用基本的Regex标识参数名称。
答案 1 :(得分:-1)
Eventid是Guid类型的属性,需要对其进行初始化,因此请尝试以下代码:
public class TestClass
{
private Guid _EventId;
public Guid EventId {
get=> (_Eventid =
_Eventid==null ? Guid.NewGuid() :
_Eventid);
set=>_EventId=value;
}
public string prop1 { get; set; }
public int prop2 { get; set; }
}