Używam Autofac z .Net MVC 3. Wygląda na to, że Autofac rozporządza zasięgiem życia w Application_EndRequest, co ma sens. Ale to powoduje ten błąd, gdy próbuję znaleźć serwis w mój własny kod, który wykonuje podczas EndRequest:Jak mogę używać Autofac w EndRequest?
MESSAGE: Instances cannot be resolved and nested lifetimes cannot be created from this LifetimeScope as it has already been disposed.
STACKTRACE: System.ObjectDisposedException
at Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(IComponentRegistration registration, IEnumerable`1 parameters)
at Autofac.ResolutionExtensions.ResolveOptionalService(IComponentContext context, Service service, IEnumerable`1 parameters)
at System.Web.Mvc.DependencyResolverExtensions.GetService[TService](IDependencyResolver resolver)
Dla porównania, tutaj jest kod używam, aby spróbować rozwiązać usługi:
public T GetInstance<T>()
{
return DependencyResolver.Current.GetService<T>();
}
Czy istnieje sposób, że mogę mieć kod, który jest wykonywany z EndRequest skorzystać z Autofac do rozwiązania usługi?
Edycja: Myślałem o zrobieniu tego z osobnym zasięgiem właśnie podczas EndRequest, jak Jim sugeruje poniżej. Oznacza to jednak, że wszelkie usługi zarejestrowane jako InstancePerHttpRequest
otrzymają nowe wystąpienie podczas EndRequest, co wydaje się nieidealne.
zobaczyć moje zmienił powyżej. Działa to, ale najlepiej chciałbym, aby mój kod w EndRequest miał taki sam przedział czasu życia jak mój inny kod, więc 'InstancePerHttpRequest' działa zgodnie z oczekiwaniami. – eliah
Następnie musisz albo uruchomić swój kod przed EndRequest, albo w jakiś sposób podłączyć się bezpośrednio do Autofac, abyś mógł wystrzelić swój kod zanim Autofac się zawiąże. –