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