zoukankan      html  css  js  c++  java
  • Instances cannot be resolved and nested lifetimes cannot be created from this LifetimeScope as it has already been disposed.

    2019-07-24 11:09:15.231+08:00 LISA.Common.Utilities.LogUtil -
    System.ObjectDisposedException: Instances cannot be resolved and nested lifetimes cannot be created from this LifetimeScope as it has already been disposed.
    at Autofac.Core.Lifetime.LifetimeScope.CheckNotDisposed()
    at Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(IComponentRegistration registration, IEnumerable`1 parameters)
    at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable`1 parameters, Object& instance)
    at Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable`1 parameters)
    at Autofac.ResolutionExtensions.Resolve[TService](IComponentContext context, IEnumerable`1 parameters)
    at LisaContainer.Resolve[T]() in C: epositoryEdenredLISA_6.0.0.0LISACoreLISA.CMSWebLISA.CMSWebApp_CodeLisaContainer.cs:line 29
    at LISA.InternalService.Client.ServiceFactory.GetFileUploadContract() in C: epositoryEdenredLISA_6.0.0.0LISACoreLISA.InternalService.ClientServiceFactory.cs:line 175
    at LISA.Fileupload.UploadBroker.get_Instance() in C: epositoryEdenredLISA_6.0.0.0LISACoreLISA.FileuploadFileUploadBrokerFactory.cs:line 39
    at LISA.Fileupload.FileUploadBrokerFactory.get_IFileUploadBroker() in C: epositoryEdenredLISA_6.0.0.0LISACoreLISA.FileuploadFileUploadBrokerFactory.cs:line 27

     

    autofac with asp.net webforms Instances cannot be resolved and nested lifetimes cannot be

    Autofac does its session disposal through an HttpModule called Autofac.Integration.Web.ContainerDisposalModule.

    You need to either

    • Put your own session cleanup in a module that is run before the container disposal. This can be a problem as the order of HttpModules is not guaranteed.

    OR

    • Remove the Container disposal HttpModule from the web.config and do your own lifetime scope cleanup in your Application EndRequest
    private void Application_EndRequest(object sender, EventArgs e)
    {
        ISession session = ContainerProvider.RequestLifetime.Resolve();
        //cleanup transaction etc...
        ContainerProvider.EndRequestLifetime();     
    }

    OR

    • Create a session manager class that is IDisposable and lifetime scoped, take your ISession as a constructor dependency and do your session cleanup when it is Disposed at the end of the lifetime.
    
        public class SessionManager : IDisposable
        {
            private readonly ISession _session;
            private ITransaction _transaction;
    
            public SessionManager(ISession session)
            {
                _session = session;
            }
    
            public void BeginRequest()
            {
                _transaction = _session.BeginTransaction();
            }
    
            #region Implementation of IDisposable
    
            /// 
            /// Dispose will be called automatically by autofac when the lifetime ends
            /// 
            public void Dispose()
            {
                //commit rollback, whatever
                _transaction.Commit();
            }
    
            #endregion
        }
    

    You must make sure to initialize your session manager.

    
        protected void Application_BeginRequest(object sender, EventArgs e)
        {
            SessionManager manager = _containerProvider.RequestLifetime.Resolve();
            manager.BeginRequest();
        }
    
  • 相关阅读:
    MVVM教程[资源+分析]
    WPF 多点触摸开发[1]:Windows 7 安装多点触屏模拟器
    wpf 打印 之PirintVisual
    WPF:PrintVisual的问题
    几个漂亮的Button的CSS
    很不错的后台界面收集[提供下载]
    网页刷新方法集合
    JS各种各样的拖动效果
    CSS+DIV(盒子)
    网页刷新方法集合
  • 原文地址:https://www.cnblogs.com/chucklu/p/11236958.html
Copyright © 2011-2022 走看看