我有一个类在网站的单独程序集中实现 IHttpModule。模块实现拦截请求并重写网站的 url。
映射存储在具有请求 url 和目标 url 的类中。
来自http://devhood.com/Tutorials/tutorial_details.aspx?tutorial_id=486的第二个示例 MTSingleton 是否适合创建映射列表?模块实现中是否有更好的方法?
编辑:我的错,这是针对 IIS 6.0 和 .NET 3.5 SP1
我有一个类在网站的单独程序集中实现 IHttpModule。模块实现拦截请求并重写网站的 url。
映射存储在具有请求 url 和目标 url 的类中。
来自http://devhood.com/Tutorials/tutorial_details.aspx?tutorial_id=486的第二个示例 MTSingleton 是否适合创建映射列表?模块实现中是否有更好的方法?
编辑:我的错,这是针对 IIS 6.0 和 .NET 3.5 SP1
听起来您希望在应用程序周期中创建一次映射对象。听起来您正试图阻止每个请求一遍又一遍地创建它。(如果我错了,请澄清。)
查看IHttpModule上的方法。假设您使用的是IIS 7.0,ASP.Net 生命周期将显示 Init() 方法被触发一次。这意味着,它在每个应用程序生命周期中触发一次。因此,启动 web 服务器,第一个请求将启动 Init(),然后后续请求不需要启动它,直到 web 服务器应用程序周期被刷新。
您应该能够安全地将映射创建代码移动到 Init() 方法中,该方法应该为您提供您正在寻求的多线程单例类型初始化的保护措施。您仍然应该在映射对象周围使用多线程保护措施,但是 IHttpModule 的 Init() 方法应该为您提供您正在寻求的一次性完成效果。