Autofac实例注册的SingleInstance()是否在IIS AppDomain回收中存活?

Adi*_*oso 4 asp.net iis asp.net-mvc autofac asp.net-web-api

我一直在使用AutofacASP.NET Web API和的集成ASP.NET MVC.一切似乎都运行良好,除了我对注册的对象的生命周期有一些挥之不去的怀疑SingleInstance(),更广泛地说是关于容器本身的生命周期.

例如,如果我按如下方式声明一个类:

public class Cache {
    private Dictionary<int, int> _internalCache = new Dictionary<int, int>();        
}
Run Code Online (Sandbox Code Playgroud)

并将其注册为容器中的单实例:

var builder = new ContainerBuilder();
builder.RegisterType<Cache>.SingleInstance();
var container = builder.Build();
Run Code Online (Sandbox Code Playgroud)

假设我同时使用相同的container实例ASP.NET MVCASP.NET Web API集成,托管IIS,容器和AppDomain回收时在其下注册的实例会发生什么?内容会_internalCache怎样?如果我CacheAppDomain回收之前和之后解决,我仍会得到相同的实例吗?

Cyr*_*and 5

回收IIS应用程序池将重新启动w3wp.exe.回收后,一切都将被重置,你将有一个新的实例Cache:一个实例Cache为每个应用程序池实例.

顺便说一句,当您回收应用程序池时,IIS将:

  1. 启动一个新的应用程序池:将启动一个新的w3wp.exe
  2. 等待新的应用程序池启动:ASP.net将自己初始化,这是应该构建Autofac容器的时候
  3. 正常关闭第一个应用程序池.所有正在运行的请求都将在旧的应用程序池上完成,新的请求将被重定向到新的应用程序池.(当所有旧请求完成或超时后,旧应用程序池将关闭)

当新的应用程序池启动时,另一个仍处于活动状态,因此可以Cache在同一时刻生成2个并发实例但在2个不同的应用程序池中.