如何仅将方法参数中对象的某些属性传递给 Fody/MethodTimer Interceptor

我想通过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 参数的某些属性传递给拦截器?


叮当猫咪
浏览 99回答 2
2回答

幕布斯6054654

根据文档,目前不支持以下内容:注 1:(还?)不支持子属性。编织器仅通过属性支持两种类型的参数:允许以下值:任何参数名称(例如 {fileName}){this}(在实例本身上调用 ToString())请注意,this 在静态方法中不可用,如果在静态方法中使用,编织器将抛出错误(强调我的)似乎您唯一可以做的就是将属性包含在重写的ToString方法中。织布机是开源的。如果您有时间可以专注于此,您可以考虑分叉该项目并进行必要的更新。一个好的起点似乎是ParameterFormattingProcessor类,它使用基本的正则表达式来识别参数名称。

哈士奇WWW

Eventid 是 Guid 类型的属性,需要初始化它,所以请尝试下面的代码:&nbsp;public class TestClass&nbsp; &nbsp; {&nbsp; &nbsp;private Guid _EventId;&nbsp; &nbsp;public Guid EventId {&nbsp;&nbsp; &nbsp; &nbsp; get=> (_Eventid =&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _Eventid==null ?&nbsp; Guid.NewGuid() :&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_Eventid);&nbsp; &nbsp; &nbsp; set=>_EventId=value;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; &nbsp; public string prop1 { get; set; }&nbsp; &nbsp; &nbsp; &nbsp; public int prop2 { get; set; }&nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP