有人知道如何从对象缓存中删除单个实例吗?
我有一个使用StructureMap获取实例的类。在某些时候,实例可能会无效,因此我想将其从缓存中删除,以确保下一次调用ObjectFactory.GetInstance
时,我可以获得一个新创建的实例。这应该适用于不同种类的生命周期。
我不想删除该类型的所有实例,也不想删除其他类型的任何实例。
有人知道如何从对象缓存中删除单个实例吗?
我有一个使用StructureMap获取实例的类。在某些时候,实例可能会无效,因此我想将其从缓存中删除,以确保下一次调用ObjectFactory.GetInstance
时,我可以获得一个新创建的实例。这应该适用于不同种类的生命周期。
我不想删除该类型的所有实例,也不想删除其他类型的任何实例。
当您需要替换已注册服务的实例以解决损坏问题时,这通常表示该实例存在时间过长。 DataContext
是一个很好的例子。 DataContext
不应该超出创建它的(Web)请求的生命周期,因为它不是线程安全的。即使您没有处理 Web 应用程序,通常也会有某种请求在其中运行,并且每个请求都会获得自己的 DataContext
实例。
如果发生异常,您通常应尽快中止整个操作。在大多数情况下,尝试恢复和继续被认为是一件坏事。这是一般的软件原则,与 DI 无关。在大多数情况下,您不知道出了什么问题,继续可能会使情况变得更糟。继续不会使您的应用程序更加健壮。它只会使查找错误变得更加困难。
长话短说:您应该将 DataContext
缓存最多限制为单个请求的生命周期,并且不要在发生异常时尝试替换它。只需让请求失败(并记录所有信息以查找错误并修复它)。
如果您正在运行 ASP.NET 应用程序,则可以将 DataContext
实例配置为 HttpContextScoped
。