예제 #1
0
        /// <summary>
        /// 使用工作单元拦截方法调用。
        /// </summary>
        /// <param name="invocation">方法调用</param>
        public void Intercept(IInvocation invocation)
        {
            var uowAttribute = invocation.MethodInvocationTarget.GetCustomAttribute <UnitOfWorkAttribute>();

            if (uowAttribute != null && !uowAttribute.IsTransactional)
            {
                invocation.Proceed();
                return;
            }

            if (_unitOfWorkProvider.Current != null)
            {
                invocation.Proceed();
                return;
            }

            using (IUnitOfWork uow = _unitOfWorkProvider.NewUnitOfWork()) {
                if (uowAttribute == null)
                {
                    uow.Begin();
                }
                else
                {
                    uow.Begin(uowAttribute.CreateUnitOfWorkOptions());
                }
                invocation.Proceed();
                uow.Complete();
            }
        }