StructureMap删除单个实例

时间:2012-11-25 16:09:14

标签: c# dependency-injection ioc-container structuremap

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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