我有一个.NET Web应用程序,它为许多非UI代码使用单独的类库.在此库中是一个静态类,用于站点范围的配置信息.它在Application_Start事件期间初始化.
我有一个问题,这个关键的静态对象似乎间歇性地失去了它的状态 – 我假设因为某些原因导致DLL被卸载.它可能不会发生几天,或者可能每天发生几次.但是,如果没有重新启动应用程序,则会发生这种情况,因此结果是在Application_Start期间初始化的所有数据都将丢失,从而导致各种问题.回收应用程序池或以其他方式重新启动应用程序会修复它.
在我弄清楚发生了什么后,我更改了代码,以便类库中的配置对象使用静态构造函数初始化自身,而不是在应用程序启动阶段.这引入了一些其他不值得进入的复杂性,但我可以使它工作 – 我只是认为它是一个糟糕的架构,不应该是必要的.
我是否能够依赖于在Application_Start期间加载的外部DLL中的静态对象,以便在应用程序的生命周期内保持其状态?显然我不能 – 我不知道为什么 – 但我想知道我是否应该寻找DLL正在卸载的原因,或者只是接受它可以并且永远不会编写依赖于静态对象之外的代码主应用程序DLL保持其值.
这就是Application_Start的样子.
Application_Start() { // asp.net routing ConfigureRoutes(); // LF is the static config object in an outside dll // the LFFactory object implements session & database stuff that's context-specific // (e.g. this is initialized with a different implementation when testing). LF.Initialize(new SiteEnvironment.Web.LFFactory()); // add custom view engine... ViewEngines.Engines.Clear(); ... blah blah }
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。