EntityHistoryInterceptor.cs 1018 B

123456789101112131415161718192021222324252627282930313233
  1. using Castle.DynamicProxy;
  2. using System.Linq;
  3. namespace Abp.EntityHistory
  4. {
  5. internal class EntityHistoryInterceptor : IInterceptor
  6. {
  7. public IEntityChangeSetReasonProvider ReasonProvider { get; set; }
  8. public EntityHistoryInterceptor()
  9. {
  10. ReasonProvider = NullEntityChangeSetReasonProvider.Instance;
  11. }
  12. public void Intercept(IInvocation invocation)
  13. {
  14. var methodInfo = invocation.MethodInvocationTarget;
  15. var useCaseAttribute = methodInfo.GetCustomAttributes(true).OfType<UseCaseAttribute>().FirstOrDefault()
  16. ?? methodInfo.DeclaringType.GetCustomAttributes(true).OfType<UseCaseAttribute>().FirstOrDefault();
  17. if (useCaseAttribute?.Description == null)
  18. {
  19. invocation.Proceed();
  20. return;
  21. }
  22. using (ReasonProvider.Use(useCaseAttribute.Description))
  23. {
  24. invocation.Proceed();
  25. }
  26. }
  27. }
  28. }