我想通过Fody / MethodTimer记录我的方法的执行时间。
我不能只传递方法参数的某些属性(属于类类型)。
我的方法:
[Time("'{obj.EventId}'")]
private static void testFody(TestClass obj)
{
for (int i = 0; i < 100; i++)
{
Console.WriteLine($"This is : {i }");
}
}
public class TestClass
{
public Guid EventId { get; set; }
public string prop1 { get; set; }
public int prop2 { get; set; }
}
当我运行此代码时,出现以下错误:
无法处理'System.Void TestCurrentEPCIS.Program :: testFody(TestCurrentEPCIS.TestClass)',因为该格式使用的'obj.EventId'不能作为方法参数使用。
当我按如下方式传递对象本身时,它将obj.ToString()传递给Interceptor类:
[Time("'{obj}'")]
private static void testFody(TestClass obj)
如何将obj参数的某些属性传递给Interceptor?
根据文档,当前不支持此功能:
注意1:尚不支持子属性。
编织器通过属性仅支持两种类型的参数:
允许以下值:
- 任何参数名称(例如{fileName})
- {this}(在实例本身上调用ToString())请注意,这在静态方法上不可用,如果在静态方法中使用,则编织器将引发错误
(强调我的)
看来,您唯一可以做的就是将属性包含在重写的ToString
方法中。
编织者是开源的。如果您有时间可以专用于此,则可以考虑分叉项目并进行必要的更新。一个好开始的地方似乎是ParameterFormattingProcessor类,它使用基本的Regex标识参数名称。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句