gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:12:25 27 4
gpt4 key购买 nike

我想通过 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; }
}

当我运行这段代码时,出现以下错误:

Could not process 'System.Void TestCurrentEPCIS.Program::testFody(TestCurrentEPCIS.TestClass)' because the format uses 'obj.EventId' which is not available as method parameter.

当我如下传递对象本身时,它将 obj.ToString() 传递给拦截器类:

[Time("'{obj}'")]
private static void testFody(TestClass obj)

如何将我的 obj 参数的一些属性传递给拦截器?

最佳答案

根据documentation ,这是目前不支持的东西:

Note 1: sub-properties are not (yet?) supported.

编织器仅通过属性支持两种类型的参数:

The following values are allowed:

  • Any parameter name (e.g. {fileName})
  • {this} (calls ToString() on the instance itself) Note that this is not available on static methods, the weaver will throw an error if being used in a static method

(强调我的)

似乎您可以做的唯一一件事就是将属性包含在重写的ToString 方法中。

编织器是开源的。如果您有时间可以专注于此,您可以考虑 fork 该项目并进行必要的更新。一个好的起点似乎是 ParameterFormattingProcessor使用基本正则表达式来识别参数名称的类。

关于c# - 如何仅将方法参数中对象的某些属性传递给 Fody/MethodTimer Interceptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55439458/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com