我一直在使用Autofac
与ASP.NET Web API
和ASP.NET MVC
进行整合。一切似乎都运行良好,除了我对注册为SingleInstance()
的对象的生命周期有一些挥之不去的怀疑,更广泛地说是关于容器本身的生命周期。
例如,如果我按如下方式声明一个类:
public class Cache {
private Dictionary<int, int> _internalCache = new Dictionary<int, int>();
}
并将其注册为容器中的单实例:
var builder = new ContainerBuilder();
builder.RegisterType<Cache>.SingleInstance();
var container = builder.Build();
假设我在container
中托管的ASP.NET MVC
和ASP.NET Web API
集成使用相同的IIS
实例,容器和在其下注册的实例会发生什么什么时候AppDomain
回收? _internalCache
的内容会怎样?如果我在Cache
回收之前和之后解决AppDomain
,我仍会获得相同的实例吗?
答案 0 :(得分:5)
回收 IIS应用程序池将重新启动 w3wp.exe 。回收后,所有内容都将重置,您将为Cache
:为每个应用程序池实例创建一个Cache
实例。
顺便说一句,当您回收应用程序池时,IIS将:
当新的应用程序池启动时,另一个仍处于活动状态,因此可能有2个并发的Cache
实例同时存在于2个不同的应用程序池中。