亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何僅將方法參數中對象的某些屬性傳遞給 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 關注
  • 153 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號