我想通过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 参数的某些属性传递给拦截器?
2 回答
幕布斯6054654
TA贡献1876条经验 获得超7个赞
根据文档,目前不支持以下内容:
注 1:(还?)不支持子属性。
编织器仅通过属性支持两种类型的参数:
允许以下值:
任何参数名称(例如 {fileName})
{this}(在实例本身上调用 ToString())请注意,this 在静态方法中不可用,如果在静态方法中使用,编织器将抛出错误
(强调我的)
似乎您唯一可以做的就是将属性包含在重写的ToString
方法中。
织布机是开源的。如果您有时间可以专注于此,您可以考虑分叉该项目并进行必要的更新。一个好的起点似乎是ParameterFormattingProcessor类,它使用基本的正则表达式来识别参数名称。
哈士奇WWW
TA贡献1799条经验 获得超6个赞
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; }
}
- 2 回答
- 0 关注
- 132 浏览
添加回答
举报
0/150
提交
取消