/// <summary>
 /// Initializes a new instance of the <see cref="ParameterAdviceContext" /> class.
 /// </summary>
 /// <param name="parameterAdvice">The parameter advice.</param>
 /// <param name="targetParameter">The parameter information.</param>
 /// <param name="parameterIndex">Index of the parameter.</param>
 /// <param name="adviceValues">The advice values.</param>
 /// <param name="nextAdviceContext">The next advice context.</param>
 internal ParameterAdviceContext(IParameterAdvice parameterAdvice, ParameterInfo targetParameter, int parameterIndex,
                                 AdviceValues adviceValues, AdviceContext nextAdviceContext)
     : base(adviceValues, nextAdviceContext)
 {
     // input parameters must be method parameters (not return value) and not out (IsOut is exclusive)
     IsIn = parameterIndex >= 0 && !targetParameter.IsOut;
     // output parameters are return value or byref or out
     IsOut            = parameterIndex == -1 || targetParameter.ParameterType.IsByRef || targetParameter.IsOut;
     TargetParameter  = targetParameter;
     ParameterType    = targetParameter.ParameterType.IsByRef ? targetParameter.ParameterType.GetElementType() : targetParameter.ParameterType;
     _parameterAdvice = parameterAdvice;
     _parameterIndex  = parameterIndex;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="ParameterAdviceContext"/> class.
 /// </summary>
 /// <param name="parameterAdvice">The parameter advice.</param>
 /// <param name="targetParameter">The target parameter.</param>
 /// <param name="parameterIndex">Index of the parameter.</param>
 /// <param name="target">The target.</param>
 /// <param name="targetType">Type of the target.</param>
 /// <param name="parameters">The parameters.</param>
 /// <param name="nextAdviceContext">The next advice context.</param>
 protected ParameterAdviceContext(IParameterAdvice parameterAdvice, ParameterInfo targetParameter, int parameterIndex,
                                  object target, Type targetType, object[] parameters, AdviceContext nextAdviceContext)
     : this(parameterAdvice, targetParameter, parameterIndex, new AdviceValues(target, targetType, parameters), nextAdviceContext)
 {
 }