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();
        }
    
  • 相关阅读:
    idea14导入eclipse项目并部署运行完整步骤
    Java之Socket
    Docker之宿主机ssh至docker容器
    ElasticSearch的安装、使用、踩坑
    Linux下grep、tail、wc、awk文件处理命令
    Spring中@Async注解实现“方法”的异步调用
    Thrift——栗子
    Linux中的守护进程——supervise
    【composer】 PHP composer 镜像地址更换
    【Mac】解决macos安装升级时报错安装所选更新时发生错误的问题
  • 原文地址:https://www.cnblogs.com/chucklu/p/11236958.html
Copyright © 2011-2022 走看看