ExpressionDescriptor.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System.Reflection;
  2. using System.Security;
  3. namespace FastReport.Code
  4. {
  5. internal class ExpressionDescriptor
  6. {
  7. private string methodName;
  8. private MethodInfo methodInfo;
  9. private AssemblyDescriptor assembly;
  10. public string MethodName
  11. {
  12. get { return methodName; }
  13. set { methodName = value; }
  14. }
  15. public object Invoke(object[] parameters)
  16. {
  17. if (assembly == null || assembly.Instance == null)
  18. return null;
  19. if (methodInfo == null)
  20. {
  21. methodInfo = assembly.Instance.GetType().GetMethod(MethodName,
  22. BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
  23. }
  24. if (methodInfo == null)
  25. return null;
  26. #if NETCOREAPP
  27. return methodInfo.Invoke(assembly.Instance, parameters);
  28. #else
  29. #pragma warning disable 618
  30. PermissionSet restrictions = assembly.Report.ScriptRestrictions;
  31. if (restrictions != null)
  32. restrictions.Deny();
  33. try
  34. {
  35. return methodInfo.Invoke(assembly.Instance, parameters);
  36. }
  37. finally
  38. {
  39. if (restrictions != null)
  40. CodeAccessPermission.RevertDeny();
  41. }
  42. #pragma warning restore 618
  43. #endif
  44. }
  45. public ExpressionDescriptor(AssemblyDescriptor assembly)
  46. {
  47. this.assembly = assembly;
  48. }
  49. }
  50. }