public object Around( [Advice.Argument(Advice.Argument.Source.Arguments)] object[] args, //[Advice.Argument(Advice.Argument.Source.Attributes)] Attribute[] attrs, [Advice.Argument(Advice.Argument.Source.Instance)] object _this, [Advice.Argument(Advice.Argument.Source.Method)] MethodBase method, [Advice.Argument(Advice.Argument.Source.Name)] string name, [Advice.Argument(Advice.Argument.Source.ReturnType)] Type retType, [Advice.Argument(Advice.Argument.Source.ReturnValue)] object retVal, [Advice.Argument(Advice.Argument.Source.Target)] Func <object[], object> target, [Advice.Argument(Advice.Argument.Source.Type)] Type hostType ) { base.LogArguments(args, AroundEnter); base.LogAttributes(args, AroundEnter); base.LogInstance(_this, AroundEnter); base.LogMethod(method, AroundEnter); base.LogName(name, AroundEnter); base.LogReturnType(retType, AroundEnter); base.LogReturnValue(retVal, AroundEnter); base.LogTarget(target, AroundEnter); base.LogType(hostType, AroundEnter); TestLog.Write(AroundEnter); var result = target(args); TestLog.Write(AroundExit); return(result); }
internal void LogReturnValue(object retVal, string prefix) { if (retVal == null) { TestLog.Write($"{prefix}:ReturnValue:null"); } else { TestLog.Write($"{prefix}:ReturnValue:{retVal.GetType().FullName}:{retVal.ToString()}"); } }
internal void LogReturnType(Type retType, string prefix) { if (retType == null) { TestLog.Write($"{prefix}:ReturnType:null"); } else { TestLog.Write($"{prefix}:ReturnType:{retType.FullName}"); } }
internal void LogName(string name, string prefix) { if (name == null) { TestLog.Write($"{prefix}:Name:null"); } else { TestLog.Write($"{prefix}:Name:{name}"); } }
internal void LogInstance(object _this, string prefix) { if (_this == null) { TestLog.Write($"{prefix}:Instance:null"); } else { TestLog.Write($"{prefix}:Instance:{_this.GetType().FullName}:{_this.ToString()}"); } }
internal void LogMethod(MethodBase method, string prefix) { if (method == null) { TestLog.Write($"{prefix}:Method:null"); } else { TestLog.Write($"{prefix}:Method:{method.DeclaringType.FullName}+{method.Name}"); } }
internal void LogType(Type hostType, string prefix) { if (hostType == null) { TestLog.Write($"{prefix}:Type:null"); } else { TestLog.Write($"{prefix}:Type:{hostType.GetType().FullName}:{hostType.ToString()}"); } }
internal void LogArguments(object[] args, string prefix) { if (args == null) { return; } else { foreach (var arg in args) { if (arg == null) { TestLog.Write($"{prefix}:Arguments:null"); } else { TestLog.Write($"{prefix}:Arguments:{arg.GetType().Name}:{arg.ToString()}"); } } } }
public void Before( [Advice.Argument(Advice.Argument.Source.Arguments)] object[] args, //[Advice.Argument(Advice.Argument.Source.Attributes)] Attribute[] attrs, [Advice.Argument(Advice.Argument.Source.Instance)] object _this, [Advice.Argument(Advice.Argument.Source.Method)] MethodBase method, [Advice.Argument(Advice.Argument.Source.Name)] string name, [Advice.Argument(Advice.Argument.Source.ReturnType)] Type retType, [Advice.Argument(Advice.Argument.Source.ReturnValue)] object retVal, [Advice.Argument(Advice.Argument.Source.Target)] Func <object[], object> target, [Advice.Argument(Advice.Argument.Source.Type)] Type hostType ) { base.LogArguments(args, BeforeExecuted); //base.LogAttributes(args, BeforeExecuted); base.LogInstance(_this, BeforeExecuted); base.LogMethod(method, BeforeExecuted); base.LogName(name, BeforeExecuted); base.LogReturnType(retType, BeforeExecuted); base.LogReturnValue(retVal, BeforeExecuted); base.LogTarget(target, BeforeExecuted); base.LogType(hostType, BeforeExecuted); TestLog.Write(BeforeExecuted); }