コード例 #1
0
        /// <summary>
        /// Intercepts the specified invocation.
        /// </summary>
        /// <param name="invocation">The invocation.</param>
        public void Intercept(IInvocation invocation)
        {
            var result = invocation.Method.Invoke(_evaluator, invocation.Arguments);

            invocation.ReturnValue = result;

            if (invocation.Method == TargetEvaluate)
            {
                if (AuditPath.IsAuditEnabled)
                {
                    AuditPath.AuditLog(_engineURI, _statementName, AuditEnum.EXPRESSION,
                                       "expression " + _expressionToString + " result " + result);
                }
            }
            else if (invocation.Method == TargetEvaluateCollEvents)
            {
                if (AuditPath.IsAuditEnabled)
                {
                    var resultBeans = (ICollection <EventBean>)result;
                    var @out        = "null";
                    if (resultBeans != null)
                    {
                        if (resultBeans.IsEmpty())
                        {
                            @out = "{}";
                        }
                        else
                        {
                            var buf   = new StringWriter();
                            var count = 0;
                            foreach (EventBean theEvent in resultBeans)
                            {
                                buf.Write(" Event ");
                                buf.Write(Convert.ToString(count++));
                                buf.Write(":");
                                EventBeanUtility.AppendEvent(buf, theEvent);
                            }
                            @out = buf.ToString();
                        }
                    }

                    AuditPath.AuditLog(_engineURI, _statementName, AuditEnum.EXPRESSION, "expression " + _expressionToString + " result " + @out);
                }
            }
            else if (invocation.Method == TargetEvaluateCollScalar)
            {
                if (AuditPath.IsAuditEnabled)
                {
                    AuditPath.AuditLog(_engineURI, _statementName, AuditEnum.EXPRESSION, "expression " + _expressionToString + " result " + result);
                }
            }
            else if (invocation.Method == TargetEvaluateBean)
            {
                if (AuditPath.IsAuditEnabled)
                {
                    var @out = "null";
                    if (result != null)
                    {
                        var buf = new StringWriter();
                        EventBeanUtility.AppendEvent(buf, (EventBean)result);
                        @out = buf.ToString();
                    }
                    AuditPath.AuditLog(_engineURI, _statementName, AuditEnum.EXPRESSION, "expression " + _expressionToString + " result " + @out);
                }
            }
        }