Я использую Autofac с .Net MVC 3. Кажется, что Autofac располагает областью lifetime в Application_EndRequest, что имеет смысл. Но это вызывает эту ошибку, когда я пытаюсь найти службу в своем собственном коде, который выполняется во время 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)
Для справки, здесь код, который я использую, чтобы попытаться разрешить службы:
public T GetInstance<T>()
{
return DependencyResolver.Current.GetService<T>();
}
Можно ли каким-либо образом иметь код, который выполняется из EndRequest, использовать Autofac для разрешения службы?
Изменить: я думал о том, чтобы делать это с отдельной областью только во время EndRequest, как предлагает Джим ниже. Однако это означает, что любые службы, зарегистрированные как InstancePerHttpRequest
, получат новый экземпляр во время EndRequest, который кажется не идеальным.