code_junkie

Is there any elegant way to execute specific code depending on the caller, using reflection or otherwise?

Nov 11th, 2011
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.35 KB | None | 0 0
  1. public string UserDefinedField
  2. {
  3. get { return _userDefinedField; }
  4. internal set { _userDefinedField = value; }
  5. set { _userDefinedField = value; ChangedFields.Add(Fields.UserDefinedField); }
  6. }
  7.  
  8. public string UserDefinedField
  9. {
  10. get { return _userDefinedField; }
  11. set { SetField(value); ChangedFields.Add(Fields.UserDefinedField); }
  12. }
  13.  
  14. // Call this from internal methods and use the public property for other cases
  15. internal string SetField(string userValue)
  16. {
  17. _userDefinedField = userValue;
  18. }
  19.  
  20. public string UserDefinedField
  21. {
  22. get { return InternalUserDefinedField; }
  23. set { InternalUserDefinedField = value; ChangedFields.Add(Fields.UserDefinedField); }
  24. }
  25.  
  26. internal string InternalUserDefinedField
  27. {
  28. get { return _userDefinedField; }
  29. set { _userDefinedField= value; }
  30. }
  31.  
  32. ...
  33. internal void SetUserDefinedField(string val) {
  34. _userDefinedField = val;
  35. }
  36. ...
  37.  
  38. // assumes callers know where they're located at in the current stack trace.
  39. private Boolean IsExternallyCalled(int methodDepth)
  40. {
  41. System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace();
  42.  
  43. System.Type callingType = trace.GetFrame(methodDepth).GetMethod().ReflectedType;
  44. System.Reflection.Assembly a = System.Reflection.Assembly.GetAssembly(callingType);
  45.  
  46. return !(a.Equals(System.Reflection.Assembly.GetCallingAssembly()));
  47. }
Add Comment
Please, Sign In to add comment