public UnitOfWorkAttribute(IWorkContextProvider workContextProvider, IExecutionContext executionContext, IApplicationDataContext applicationDataContext)
 {
     this.WorkContextProvider    = workContextProvider;
     this.ExecutionContext       = executionContext;
     this.ApplicationDataContext = applicationDataContext;
     this.UseTransaction         = false;
 }
        public WorkContext GetContext()
        {
            //基于这样一个假设:
            //上次访问的 ContextProvider 会有更大的几率被下一次调用访问,冷热数据原理,热的更热,所以缓存一下。
            WorkContext context = null;

            if ((context = _lastProvider?.GetWorkContext()) == null)
            {
                lock (SyncRoot)
                {
                    if ((context = _lastProvider?.GetWorkContext()) == null)
                    {
                        //热数据转冷数据,可以切换 ContextProvider 了
                        _lastProvider = null;
                        foreach (var p in _contextProviders)
                        {
                            context = p.GetWorkContext();
                            if (context != null)
                            {
                                _lastProvider = p;
                                break;
                            }
                        }
                    }
                }
            }
            return(context);
        }