Autofac with .Net MVC 3 kullanıyorum. Autofac'ın ömür boyu kapsama alanını Application_EndRequest uygulamasında kullandığı anlaşılıyor. Ben EndRequest sırasında yürütür kendi kodunda bir hizmet bulmaya Ama bu hataya neden olduğunu:EndRequest'te Autofac'ı nasıl kullanabilirim?
public T GetInstance<T>()
{
return DependencyResolver.Current.GetService<T>();
}
: Referans olarak
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)
, burada hizmetlerini çözmeye çalışmak için kullanıyorum kodu
EndRequest'ten, hizmet çözünürlüğü için Autofac'ın avantajından yararlanan kodum var mı?
Düzenleme: Jim'in aşağıda önerdiği gibi, bunu yalnızca EndRequest sırasında ayrı bir kapsamla yapmayı düşündüm. Ancak, bu, InstancePerHttpRequest
olarak kaydedilen hizmetlerin, ideal olmayan gibi görünen EndRequest sırasında yeni bir örnek alacağı anlamına gelir.
yukarıda benim düzenlemeyi Bkz senin
global.asax.cs
şey bu var varsayarsak. Bu çalışır, ancak ideal olarak EndRequest'teki kodumun diğer kodumla aynı ömür kapsamına sahip olmasını isterim, böylece 'InstancePerHttpRequest' beklendiği gibi çalışır. – eliahArdından, kodunuzu EndRequest'ten önce çalıştırmanız ya da Autofac doğrudan bağlanmanız gerekir, böylece Autofac tamamlanmadan önce kodunuzu tetikleyebilirsiniz. –