gpt4 book ai didi

c# - StructureMap 移除单个实例

转载 作者:行者123 更新时间:2023-11-30 17:57:02 25 4
gpt4 key购买 nike

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

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

最佳答案

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

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

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

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

关于c# - StructureMap 移除单个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13552790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com