12
私は.Net MVC 3でAutofacを使用しています.Autofacは、Application_EndRequestで有効期間のスコープを破棄しているようです。参考のためにEndRequestでAutofacを使用するにはどうしたらいいですか?
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)
、ここで私はサービスを解決しようとするために使用しているコードだ:しかし、それは私がEndRequestの間に実行される自分のコードでサービスを見つけるためにしようとすると、このエラーを引き起こして
public T GetInstance<T>()
{
return DependencyResolver.Current.GetService<T>();
}
サービスの解決のためにAutofacを利用するEndRequestから実行されるコードを作成する方法はありますか?
編集:Jimが以下に示すように、EndRequestの間だけ別のスコープでそれを行うことを考えました。しかし、これは、InstancePerHttpRequest
として登録されているサービスは、EndRequestの間に新しいインスタンスを取得することになり、非理想的と思われます。
上記の私の編集を参照してくださいあなたはこのあなたの
global.asax.cs
で何かを持っていると仮定。これはうまくいきますが、理想的には、EndRequestのコードで他のコードと同じ有効期間を持つようにして、 'InstancePerHttpRequest'が期待どおりに動作するようにしたいと思います。 – eliahその後、EndRequestの前にコードを実行するか、何とかAutofacに直接フックして、Autofacが終了する前にコードを起動させる必要があります。 –