[英]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.