47 lines
1.3 KiB
C#
47 lines
1.3 KiB
C#
|
using System.Diagnostics;
|
||
|
using AspectInjector.Broker;
|
||
|
using Serilog;
|
||
|
|
||
|
namespace DispenserCommon.Aop;
|
||
|
|
||
|
[Aspect(Scope.Global)]
|
||
|
[Injection(typeof(ConsumeTime))]
|
||
|
public class ConsumeTime(string title) : Attribute
|
||
|
{
|
||
|
public ConsumeTime() : this("")
|
||
|
{
|
||
|
Title = "";
|
||
|
}
|
||
|
|
||
|
public string Title { get; set; } = title;
|
||
|
|
||
|
/// <summary>
|
||
|
/// 通过AOP实现方法执行前后的时间消耗
|
||
|
/// </summary>
|
||
|
/// <param name="name"></param>
|
||
|
/// <param name="args"></param>
|
||
|
/// <param name="hostType"></param>
|
||
|
/// <param name="target"></param>
|
||
|
/// <param name="triggers"></param>
|
||
|
/// <returns></returns>
|
||
|
[Advice(Kind.Around)]
|
||
|
public object Around([Argument(Source.Name)] string name,
|
||
|
[Argument(Source.Arguments)] object[] args,
|
||
|
[Argument(Source.Type)] Type hostType,
|
||
|
[Argument(Source.Target)] Func<object[], object> target,
|
||
|
[Argument(Source.Triggers)] Attribute[] triggers)
|
||
|
{
|
||
|
var sw = Stopwatch.StartNew();
|
||
|
try
|
||
|
{
|
||
|
var result = target(args);
|
||
|
return result;
|
||
|
}
|
||
|
finally
|
||
|
{
|
||
|
sw.Stop();
|
||
|
Log.Information(
|
||
|
$"方法 {(Title != "" ? Title : name)} 执行时间:{sw.Elapsed.TotalMilliseconds}ms");
|
||
|
}
|
||
|
}
|
||
|
}
|