加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – Autofac实例注册的SingleInstance()能否在IIS AppDom

发布时间:2020-12-16 06:39:23 所属栏目:asp.Net 来源:网络整理
导读:我一直在使用Autofac与ASP.NET Web API和ASP.NET MVC的集成.一切似乎都运行良好,除了我对注册为SingleInstance()的对象的生命周期有一些挥之不去的怀疑,更广泛地关于容器本身的生命周期. 例如,如果我按如下方式声明一个类: public class Cache { private Di
我一直在使用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();

假设我在IIS中托管的ASP.NET MVC和ASP.NET Web API集成使用相同的容器实例,当AppDomain回收时,容器和在其下注册的实例会发生什么? _internalCache的内容会发生什么变化?如果我在AppDomain回收之前和之后解析Cache,我还会得到相同的实例吗?

解决方法

回收IIS应用程序池将重新启动w3wp.exe.在回收之后,所有内容都将被重置,您将拥有一个新的Cache实例:每个应用程序池实例的一个Cache实例.

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读