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); }