为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
叮当猫咪 2022-11-21 20:27:48
我想通过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类,它使用基本的正则表达式来识别参数名称。


查看完整回答
反对 回复 2022-11-21
?
哈士奇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; }

    }


查看完整回答
反对 回复 2022-11-21
  • 2 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信