繁体   English   中英

应用重新启动时未处置Autofac SingleInstance吗?

[英]Autofac SingleInstance not disposed when app restarts?

在我的MVC4项目中,我在创建的对象中有一个lucene IndexWriter ,该对象是一个名为LuceneIndex的IDisposable对象。
处置完我的对象后,它将调用索引编写器的Dispose()方法。 处置IndexWriter会删除磁盘上名为write.lock的文件。 我的LuceneIndex的注册方式如下:

builder.RegisterType<LuceneIndex>()
 .WithParameter("indexLocation", HttpContext.Current.Server.MapPath(UmbracoConfig.IndexPath))
 .SingleInstance();

当我停止/回收/重新启动网站时,不会删除write.lock,因此从现在开始,我会从lucene中得到一个异常,如下所示:

消息:[LockObtainFailedException:锁定获取超时:NativeFSLock @ C:\\ Dev \\ FOO \\ http \\ App_Data \\ Index \\ write.lock:System.IO.IOException:该进程无法访问文件'C:\\ Dev \\ FOO \\ http \\ App_Data \\ Index \\ write.lock',因为它正在被另一个进程使用。 ...

注意:未命中dispose方法中的断点。 应该是吗

什么是确保IndexWriter正确放置以便不遗漏write.lock的最佳方法?

我应该做一些完全不同的事情吗?

必须在容器上显式调用Dispose,如下所示:

protected override void OnApplicationEnd(object sender, EventArgs e)
{
    _container.Dispose();
    base.OnApplicationEnd(sender, e);
}

附带说明:应用程序结束和应用程序启动重叠,因此在新进程启动时,结束进程仍具有write.lock文件句柄。 为了解决这个问题,我只是将WRITE_LOCK_TIMEOUT锁获取超时WRITE_LOCK_TIMEOUT增加到1分钟以处理这些情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM