3

有谁知道如何从对象缓存中删除单个实例?我有一个使用 StructureMap 获取实例的类。有时,一个实例可能会变得无效,所以我想将它从缓存中删除,以确保下次调用时ObjectFactory.GetInstance,我得到一个新创建的实例。这应该适用于不同类型的生命周期。

我不想删除该类型的所有实例,也不想删除其他类型的任何其他实例。

4

1 回答 1

1

当您因为损坏而需要用新服务替换已注册服务的实例时,这通常表明该实例的寿命过长。ADataContext就是一个很好的例子。ADataContext不应该比创建它的 (web) 请求长,因为它不是线程安全的。即使您不处理 Web 应用程序,通常也会有某种类型的请求在其中进行操作,并且每个请求都有自己的DataContext实例。

如果发生异常,您通常应该尽快中止整个操作。在大多数情况下,试图恢复和继续通常被认为是一件坏事。这是一个通用的软件原理,与 DI 无关。在大多数情况下,您并不确切知道出了什么问题,继续下去甚至会使事情变得更糟。继续不会使您的应用程序更健壮。它只会使查找错误变得更加困难。

长话短说:您DataContext最多应该在单个请求的生命周期内缓存 a ,并且不要在发生异常时尝试替换它。只需让请求失败(并记录查找错误并修复它所需的所有信息)。

如果您正在运行 ASP.NET 应用程序,则可以将DataContext实例配置为HttpContextScoped.

于 2012-11-25T21:48:34.867 回答