コード例 #1
0
        public object ApplyTo(MethodInvocationInfo invocation)
        {
            var workContext = WorkContextProvider.CurrentContext;

            if (!workContext.IsUnitOfWorkRunning)
            {
                throw new UnitOfWorkViolationException(
                          string.Format("{0} should be called within an active Unit Of Work.",
                                        invocation.Method.FullFriendlyName()));
            }

            var unitOfWorkInfo = workContext.CurrentUnitOfWork.Info;

            var type = invocation.Method.ReflectedType;

            if (!unitOfWorkInfo.IsTransactional)
            {
                var baseType = transactionalMethodsByType.Keys
                               .SingleOrDefault(x => x.IsGenericTypeDefinition
                                              ? x.GenericDefinitionIsAssignableFrom(type)
                                              : x.IsAssignableFrom(type));

                if (baseType != null && transactionalMethodsByType[baseType].Contains(invocation.Method.Name))
                {
                    throw new UnitOfWorkViolationException(
                              string.Format("{0} should be called within an active transactional Unit Of Work.",
                                            invocation.Method.FullFriendlyName()));
                }
            }

            return(invocation.Proceed());
        }
 public object ApplyTo(MethodInvocationInfo invocation)
 {
     if (!PersistenceContext.IsSessionOpened)
     {
         throw new InvalidOperationException(
                   string.Format("{0} should be called within an open persistence session.",
                                 invocation.Method.FullFriendlyName()));
     }
     return(invocation.Proceed());
 }
コード例 #3
0
ファイル: LogBehavior.cs プロジェクト: tmilar/encuentrame
        /// <summary>
        ///   Invocation of the interceptor
        /// </summary>
        /// <param name = "invocation">The invocation info.</param>
        /// <returns>return value of the invoked method</returns>
        public object ApplyTo(MethodInvocationInfo invocation)
        {
            object result;

            // Logging Starting Method
            if (Log.IsDebugEnabled)
            {
                LogStartDebug(invocation);
            }
            else if (Log.IsInfoEnabled)
            {
                LogStartInfo(invocation);
            }

            // Invoke Method
            try
            {
                result = invocation.Proceed();
            }
            catch (Exception ex)
            {
                // Logging Error
                LogError(invocation, ex.GetBaseException());
                throw;
            }

            // Logging Ending Method
            if (Log.IsDebugEnabled)
            {
                LogEndDebug(invocation, result);
            }
            else if (Log.IsInfoEnabled)
            {
                LogEndInfo(invocation);
            }
            return(result);
        }
コード例 #4
0
ファイル: AuditBehavior.cs プロジェクト: tmilar/encuentrame
        /// <summary>
        ///   Invocation of the interceptor
        /// </summary>
        /// <param name = "invocation">The invocation info.</param>
        /// <returns>return value of the invoked method</returns>
        public object ApplyTo(MethodInvocationInfo invocation)
        {
            object result;

            var         attributes = invocation.Method.GetCustomAttributes(typeof(IAuditAttribute), true);
            Audit       audit      = null;
            ActionsEnum?actionType = null;
            Type        type       = null;

            if (attributes.Length > 0)
            {
                audit = GetNewAudit();
                var auditAttribute = (IAuditAttribute)attributes[0];
                if (auditAttribute.BehaviorType != default(ActionsEnum))
                {
                    audit.Action = (int)auditAttribute.BehaviorType;
                    AuditContextManager.SetAction(auditAttribute.BehaviorType);
                    actionType = auditAttribute.BehaviorType;
                }
                if (auditAttribute.EntityType != null)
                {
                    audit.EntityType = auditAttribute.EntityType.Name;
                    AuditContextManager.SetEntityType(auditAttribute.EntityType);
                    type = auditAttribute.EntityType;
                }

                var entityIdParameterName = auditAttribute.IdField;
                if (!string.IsNullOrEmpty(entityIdParameterName))
                {
                    var parameters = invocation.Method.GetParameters();
                    for (int i = 0; i < parameters.Length; i++)
                    {
                        var parameterInfo = parameters[i];
                        if (parameterInfo.Name == entityIdParameterName)
                        {
                            audit.EntityId = (int)invocation.Arguments[i];
                        }
                    }
                }
            }

            result = invocation.Proceed();

            var auditContext = AuditContextManager.Context;

            if (!auditContext.Cancelled)
            {
                if (AuditContextManager.Context != null && auditContext.ContextData.Count > 0)
                {
                    if (audit == null)
                    {
                        audit = GetNewAudit();
                    }
                    var contextData = auditContext.ContextData[0];
                    UpdateAudit(audit, contextData);
                    if (contextData.Action != default(ActionsEnum))
                    {
                        actionType = contextData.Action;
                    }
                    if (contextData.EntityType != null)
                    {
                        type = contextData.EntityType;
                    }
                }

                Audits.Put(audit);

                if (AuditContextManager.Context != null && auditContext.ContextData.Count > 1)
                {
                    for (int i = 1; i < auditContext.ContextData.Count; i++)
                    {
                        var contextData = auditContext.ContextData[i];
                        var extraAudit  = new Audit(AuthenticationProvider.GetLoggedUser());
                        extraAudit.Date = audit.Date;
                        UpdateAudit(extraAudit, contextData);
                        Audits.Put(extraAudit);
                    }
                }
            }

            if (actionType.HasValue && type != null &&
                AuditContextManager.Context != null && auditContext.ContextData.Count > 0 &&
                auditContext.ContextData[0].Displayable != null)
            {
                if (actionType == ActionsEnum.Create)
                {
                    NotificationService.SendCreatedNotificationFor(type, auditContext.ContextData[0].Displayable.ToDisplay());
                }

                if (actionType == ActionsEnum.Edit)
                {
                    NotificationService.SendUpdatedNotificationFor(type, auditContext.ContextData[0].Displayable.ToDisplay(), audit.EntityId);
                }

                if (actionType == ActionsEnum.Delete)
                {
                    NotificationService.SendDeletedNotificationFor(type, auditContext.ContextData[0].Displayable.ToDisplay(), audit.EntityId);
                }
            }

            return(result);
        }
コード例 #5
0
 /// <summary>
 ///   Execute the Command.
 /// </summary>
 /// <returns></returns>
 public Object Execute()
 {
     return(invocationInfo.Proceed());
 }