Supposons que j'ai une dépendance qui est enregistrée en tant que HttpRequestScoped afin qu'il y ait une seule instance par requête. Comment pourrais-je résoudre une dépendance du même type en dehors d'une requête HttpRequest?Résolution d'instances HttpRequestScoped en dehors d'une requête HttpRequest dans Autofac
Par exemple:
// 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.
}
Le code ci-dessus jette un DependencyResolutionException quand il exécute le gestionnaire CacheItemRemoved:
aucune marge correspondant à l'expression valeur »(Autofac.Builder.RegistrationBuilder`3 + < > c__DisplayClass0 [MyApp.Core.Data.MyDataContext, Autofac.Builder.SimpleActivatorData, Autofac.Builder.SingleRegistrationStyle]). lifetimeScopeTag.Equals (scope.Tag) 'est visible depuis la portée dans laquelle l'instance a été demandée.
Cela fonctionne, mais pour une raison quelconque, aucun de mes changements sont persistés dans la base de données lorsque je fais cette modification. –
Comme vous ne faites pas partie d'une requête HTTP, les ajouts de pipeline de requête que vous avez effectués ne seront pas exécutés; il y a des chances qu'il y ait une transaction que vous devez engager quelque part. –