简单注入器 ASP.NET 单例处理
Simple Injector ASP.NET Singleton Dispose
Simple Injector 文档非常清楚地说明了瞬态注册和单例注册,以及它们将如何处置等。文档表明,当容器被处置时,除了预先构造的对象之外的所有注册的单例都将被处置。
我的问题具体涉及单例注册,我需要在处理 ASP.NET 应用程序时处理它(我会在处理该服务时发送任何剩余的消息)。我的大部分注册都是暂时的,并在处理每个请求时处理。在 VS/IISExpress 中调试时,我从来没有看到我的单身人士何时被处置 - 或者容器本身何时最终被处置。在我的控制台应用程序和 Azure 服务中,我只需在完成后调用 container.Dispose()。 ASP.NET 中有任何有关此最终清理的线索吗?
要处理单例,您需要在应用程序结束时显式调用 Container.Dispose()
。这可以在 Global.asax 的 Application_End
事件中完成。但请注意。
I send any remaining messages when that service is disposed
这似乎是一个非常糟糕的主意,因为 Application_End
事件没有 运行 的原因有很多。 IIS 可以非常积极地终止应用程序,因此会造成断电和其他硬件故障。如果发生这种情况,则意味着您将丢失仍在本地缓冲区中的所有消息。
对于用于应用程序心跳和有时记录日志的易变消息,这可能不是问题,但如果这些消息描述重要的业务事件,您应该使用持久的排队或存储机制。
When debugging in VS/IISExpress, I don't ever see when my singletons get disposed
很有可能。在调试 Web 应用程序时,Web 应用程序永远不会自行停止。如果您停止调试,应用程序在没有机会 运行 任何终结器和清理方法的情况下突然停止,或者当您停止调试时,应用程序会在后台保持 运行ning;这仍然意味着您不会看到任何清理工作。
Simple Injector 文档非常清楚地说明了瞬态注册和单例注册,以及它们将如何处置等。文档表明,当容器被处置时,除了预先构造的对象之外的所有注册的单例都将被处置。
我的问题具体涉及单例注册,我需要在处理 ASP.NET 应用程序时处理它(我会在处理该服务时发送任何剩余的消息)。我的大部分注册都是暂时的,并在处理每个请求时处理。在 VS/IISExpress 中调试时,我从来没有看到我的单身人士何时被处置 - 或者容器本身何时最终被处置。在我的控制台应用程序和 Azure 服务中,我只需在完成后调用 container.Dispose()。 ASP.NET 中有任何有关此最终清理的线索吗?
要处理单例,您需要在应用程序结束时显式调用 Container.Dispose()
。这可以在 Global.asax 的 Application_End
事件中完成。但请注意。
I send any remaining messages when that service is disposed
这似乎是一个非常糟糕的主意,因为 Application_End
事件没有 运行 的原因有很多。 IIS 可以非常积极地终止应用程序,因此会造成断电和其他硬件故障。如果发生这种情况,则意味着您将丢失仍在本地缓冲区中的所有消息。
对于用于应用程序心跳和有时记录日志的易变消息,这可能不是问题,但如果这些消息描述重要的业务事件,您应该使用持久的排队或存储机制。
When debugging in VS/IISExpress, I don't ever see when my singletons get disposed
很有可能。在调试 Web 应用程序时,Web 应用程序永远不会自行停止。如果您停止调试,应用程序在没有机会 运行 任何终结器和清理方法的情况下突然停止,或者当您停止调试时,应用程序会在后台保持 运行ning;这仍然意味着您不会看到任何清理工作。