简单的注入器ASP.NET Singleton Dispose

时间:2017-05-14 15:43:32

标签: asp.net simple-injector

Simpl eInjector文档在瞬态和单例注册以及它们将如何处理等方面都非常清楚。文档表明,除了预先构建的对象之外的所有注册的单例将在容器被处置时被处置。

我的问题特别涉及单个注册,当ASP.NET应用程序被处置时我需要处理(我在发布该服务时发送任何剩余的消息)。我的大多数注册都是短暂的,并在处理每个请求时处理。在VS / IISExpress中进行调试时,我从来没有看到我的单身人士何时被处置 - 或者当容器本身最终被处置时。在我的控制台应用程序& azure服务我只是在完成后调用container.Dispose()。 ASP.NET最终清理的任何线索?

1 个答案:

答案 0 :(得分:2)

对于要处置的单身人士,您需要在申请结束时明确调用Container.Dispose()。例如,可以在Global.asax中的Application_End事件中完成此操作。但请注意。

  

我在发布该服务时发送任何剩余的消息

这似乎是一个非常糟糕的主意,因为Application_End事件没有运行的原因有很多。 IIS可以非常积极地杀死应用程序,因此会停电和其他硬件故障。如果发生这种情况,则意味着您将丢失仍在本地缓冲区中的任何消息。

对于用于应用程序心跳和有时记录的易失性消息,这可能不是问题,但如果这些消息描述了重要的业务事件,则应使用持久排队或存储机制。

  

在VS / IISExpress中进行调试时,我什么都看不到我的单身人士何时被处理

那很可能。调试Web应用程序时,Web应用程序永远不会自行停止。如果您停止调试,应用程序突然停止而没有机会运行任何终结器和清理方法,或者当您停止调试时,应用程序将继续在后台运行;这仍然意味着你不会发现任何清理工作。