public static IResolverScope GetRequestScope(this IResolver resolver, HttpContextBase context = null) { if (resolver == null) { throw new ArgumentNullException("resolver"); } if (context == null) { context = new HttpContextWrapper(HttpContext.Current); } var item = context.Items[_requestKey]; if (item == null) { lock (context.Items.SyncRoot) // Lock on different object only being used to get the Scope to minimize locking? { item = context.Items[_requestKey]; if (item == null) { var scope = resolver.GetScope(); context.Items[_requestKey] = scope; // Register for automatica disposal at end of request context.RegisterForDispose(scope); return(scope); } } } return((IResolverScope)item); }
public static IResolverScope GetSessionScope(this IResolver resolver, HttpContextBase context = null) { if (resolver == null) { throw new ArgumentNullException("resolver"); } if (context == null) { context = new HttpContextWrapper(HttpContext.Current); } // Try to get already existing item // Let it throw an null pointer exception if context.Session is used in a non web/Session context. var item = context.Session[_sessionKey]; if (item == null) { var scope = resolver.GetScope(); context.Session[_sessionKey] = scope; return(scope); } return((IResolverScope)item); }
public System.Web.Http.Dependencies.IDependencyScope BeginScope() { // Be able to switch between Container Scope (returning this) and "real" scope return(new DynamoDependencyScope(_resolver.GetScope())); // or GetRequestScope() ? //return this; }