AbpCrossCuttingConcerns.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using System;
  2. using Abp.Application.Services;
  3. using Abp.Collections.Extensions;
  4. using JetBrains.Annotations;
  5. namespace Abp.Aspects
  6. {
  7. internal static class AbpCrossCuttingConcerns
  8. {
  9. public const string Auditing = "AbpAuditing";
  10. public const string Validation = "AbpValidation";
  11. public const string UnitOfWork = "AbpUnitOfWork";
  12. public const string Authorization = "AbpAuthorization";
  13. public static void AddApplied(object obj, params string[] concerns)
  14. {
  15. if (concerns.IsNullOrEmpty())
  16. {
  17. throw new ArgumentNullException(nameof(concerns), $"{nameof(concerns)} should be provided!");
  18. }
  19. (obj as IAvoidDuplicateCrossCuttingConcerns)?.AppliedCrossCuttingConcerns.AddRange(concerns);
  20. }
  21. public static void RemoveApplied(object obj, params string[] concerns)
  22. {
  23. if (concerns.IsNullOrEmpty())
  24. {
  25. throw new ArgumentNullException(nameof(concerns), $"{nameof(concerns)} should be provided!");
  26. }
  27. var crossCuttingEnabledObj = obj as IAvoidDuplicateCrossCuttingConcerns;
  28. if (crossCuttingEnabledObj == null)
  29. {
  30. return;
  31. }
  32. foreach (var concern in concerns)
  33. {
  34. crossCuttingEnabledObj.AppliedCrossCuttingConcerns.RemoveAll(c => c == concern);
  35. }
  36. }
  37. public static bool IsApplied([NotNull] object obj, [NotNull] string concern)
  38. {
  39. if (obj == null)
  40. {
  41. throw new ArgumentNullException(nameof(obj));
  42. }
  43. if (concern == null)
  44. {
  45. throw new ArgumentNullException(nameof(concern));
  46. }
  47. return (obj as IAvoidDuplicateCrossCuttingConcerns)?.AppliedCrossCuttingConcerns.Contains(concern) ?? false;
  48. }
  49. public static IDisposable Applying(object obj, params string[] concerns)
  50. {
  51. AddApplied(obj, concerns);
  52. return new DisposeAction(() =>
  53. {
  54. RemoveApplied(obj, concerns);
  55. });
  56. }
  57. public static string[] GetApplieds(object obj)
  58. {
  59. var crossCuttingEnabledObj = obj as IAvoidDuplicateCrossCuttingConcerns;
  60. if (crossCuttingEnabledObj == null)
  61. {
  62. return new string[0];
  63. }
  64. return crossCuttingEnabledObj.AppliedCrossCuttingConcerns.ToArray();
  65. }
  66. }
  67. }