Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Autofac实例注册的SingleInstance()是否在IIS AppDomain回收中幸存?_Asp.net_Asp.net Mvc_Iis_Asp.net Web Api_Autofac - Fatal编程技术网

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,所以同样的事情也适用