Dispenser/DispenserCommon/Aop/GlobalTry.cs

39 lines
1.1 KiB
C#
Raw Normal View History

2024-08-16 07:20:09 +00:00
using System.Reflection;
using AspectInjector.Broker;
using DispenserCommon.Utils;
using Serilog;
namespace DispenserCommon.Aop;
[Aspect(Scope.Global)]
[AttributeUsage(AttributeTargets.Class)]
[Injection(typeof(GlobalTry), Inherited = true)]
public class GlobalTry : Attribute
{
/// <summary>
/// 通过AOP实现方法执行前后的时间消耗
/// </summary>
/// <param name="name"></param>
/// <param name="args"></param>
/// <param name="target"></param>
/// <param name="method"></param>
/// <returns></returns>
[Advice(Kind.Around, Targets = Target.Method)]
public object? HandleMethod([Argument(Source.Name)] string name,
[Argument(Source.Arguments)] object[] args,
[Argument(Source.Target)] Func<object[], object> target,
[Argument(Source.Metadata)] MethodBase method)
{
try
{
var result = target(args);
return result;
}
catch (Exception e)
{
Log.Error(e, $"方法 {name} 执行异常: {e.Message}");
ToastUtil.Error("操作异常: " + e.Message);
return default;
}
}
}