Resolving HttpRequestScoped Instances outside of a HttpRequest in Autofac

Posted by Page Brooks on Stack Overflow See other posts from Stack Overflow or by Page Brooks
Published on 2010-06-10T00:17:03Z Indexed on 2010/06/10 0:22 UTC
Read the original article Hit count: 398

Filed under:
|

Suppose I have a dependency that is registered as HttpRequestScoped so there is only one instance per request. How could I resolve a dependency of the same type outside of an HttpRequest?

For example:

// Global.asax.cs Registration
builder.Register(c => new MyDataContext(connString)).As<IDatabase>().HttpRequestScoped();
_containerProvider = new ContainerProvider(builder.Build());

// This event handler gets fired outside of a request
// when a cached item is removed from the cache.
public void CacheItemRemoved(string k, object v, CacheItemRemovedReason r)
{
    // I'm trying to resolve like so, but this doesn't work...
    var dataContext = _containerProvider.ApplicationContainer.Resolve<IDatabase>();
    // Do stuff with data context.
}

The above code throws a DependencyResolutionException when it executes the CacheItemRemoved handler:

No scope matching the expression 'value(Autofac.Builder.RegistrationBuilder`3+<>c__DisplayClass0[MyApp.Core.Data.MyDataContext,Autofac.Builder.SimpleActivatorData,Autofac.Builder.SingleRegistrationStyle]).lifetimeScopeTag.Equals(scope.Tag)' is visible from the scope in which the instance was requested.

© Stack Overflow or respective owner

Related posts about ioc-container

Related posts about autofac