如何仅将方法参数中对象的某些属性传递给 Fody/MethodTimer 拦截器
How to pass only some properties of an object in method parameters to Fody/MethodTimer Interceptor
我想通过 Fody/MethodTimer.
记录我的方法的执行时间
我不能只传递我的方法参数的某些属性(class 类型)。
我的方法:
[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() 传递给拦截器 class:
[Time("'{obj}'")]
private static void testFody(TestClass obj)
如何将 obj 参数的一些属性传递给拦截器?
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; }
}
根据 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
方法中。
编织器是开源的。如果您有时间可以专注于此,您可以考虑分叉该项目并进行必要的更新。 ParameterFormattingProcessor class 似乎是一个不错的起点,它使用基本的正则表达式来识别参数名称。
我想通过 Fody/MethodTimer.
记录我的方法的执行时间我不能只传递我的方法参数的某些属性(class 类型)。
我的方法:
[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() 传递给拦截器 class:
[Time("'{obj}'")]
private static void testFody(TestClass obj)
如何将 obj 参数的一些属性传递给拦截器?
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; }
}
根据 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
方法中。
编织器是开源的。如果您有时间可以专注于此,您可以考虑分叉该项目并进行必要的更新。 ParameterFormattingProcessor class 似乎是一个不错的起点,它使用基本的正则表达式来识别参数名称。