Asp.net Autofac实例注册的SingleInstance()是否在IIS AppDomain回收中幸存?
我一直在使用Asp.net Autofac实例注册的SingleInstance()是否在IIS AppDomain回收中幸存?,asp.net,asp.net-mvc,iis,asp.net-web-api,autofac,Asp.net,Asp.net Mvc,Iis,Asp.net Web Api,Autofac,我一直在使用Autofac与ASP.NET Web API和ASP.NET MVC集成。一切似乎都很正常,只是我对注册为SingleInstance()的对象的生命周期有一些挥之不去的疑问,更广泛地说,对容器本身的生命周期也有一些疑问 例如,如果我声明一个类,如下所示: public class Cache { private Dictionary<int, int> _internalCache = new Dictionary<int, int>();
Autofac
与ASP.NET Web API
和ASP.NET MVC
集成。一切似乎都很正常,只是我对注册为SingleInstance()
的对象的生命周期有一些挥之不去的疑问,更广泛地说,对容器本身的生命周期也有一些疑问
例如,如果我声明一个类,如下所示:
public class Cache {
private Dictionary<int, int> _internalCache = new Dictionary<int, int>();
}
公共类缓存{
私有字典_internalCache=新字典();
}
并将其注册为容器中的单个实例:
var builder = new ContainerBuilder();
builder.RegisterType<Cache>.SingleInstance();
var container = builder.Build();
var builder=newcontainerbuilder();
builder.RegisterType.SingleInstance();
var container=builder.Build();
假设我对ASP.NET MVC
和ASP.NET Web API
集成使用了相同的container
实例,托管在IIS
中,当AppDomain
回收时,容器和在其下注册的实例会发生什么情况?\u internalCache
的内容会发生什么变化?如果我在AppDomain
回收之前和之后解析Cache
,我还会得到相同的实例吗 回收IIS应用程序池将重新启动w3wp.exe。回收后,所有内容都将重置,您将有一个新的缓存实例:每个应用程序池实例都有一个缓存实例
顺便说一下,当您回收应用程序池时,IIS将:
启动新的应用程序池:将启动新的w3wp.exe
等待新的应用程序池启动:ASP.net将自动初始化,此时应构建Autofac容器
正常关闭第一个应用程序池。所有正在运行的请求将在旧应用程序池上完成,新请求将重定向到新应用程序池。(所有旧请求完成时或超时后,旧应用程序池将关闭)
当新的应用程序池启动时,另一个仍处于活动状态,因此有可能同时有两个缓存的并发实例处于活动状态,但位于两个不同的应用程序池中。简短回答否。。。。它是否也适用于Azure网站或web角色?我想在幕后有IIS,所以同样的事情也适用