我一问 gpt ,代码就出来了,不比在这里问这些网友快?
}
protected override object Invoke(MethodInfo targetMethod, object[] args)
{
// 检查方法是否有 MeasureTimeAttribute
if (targetMethod.GetCustomAttribute<MeasureTimeAttribute>() != null)
{
var stopwatch = Stopwatch.StartNew();
try
{
// 执行实际方法
return targetMethod.Invoke(_decorated, args);
}
finally
{
stopwatch.Stop();
Console.WriteLine($"方法 {
targetMethod.Name} 执行耗时: {stopwatch.ElapsedMilliseconds} ms");
}
}
else
{
// 没有特性直接调用方法
return targetMethod.Invoke(_decorated, args);
}
}
}
3. 应用到目标类
csharp
复制代码
public interface IExampleService
{
[MeasureTime]
void DoSomething();
void DoOtherThing();
}
public class ExampleService : IExampleService
{
public void DoSomething()
{
// 模拟耗时操作
System.Threading.Thread.Sleep(100);
Console.WriteLine("执行 DoSomething");
}
public void DoOtherThing()
{
Console.WriteLine("执行 DoOtherThing");
}
}
4. 使用动态代理包装实例
csharp
复制代码
class Program
{
static void Main()
{
var service = MethodInterceptor<IExampleService>.Create(new ExampleService());
service.DoSomething(); // 记录耗时
service.DoOtherThing(); // 不记录耗时
}
}