gpt4 book ai didi

c# - 使用 Reuse.InWebRequest/Reuse.InThread 时使用 DryIoc 解析新实例

转载 作者:太空宇宙 更新时间:2023-11-03 22:54:50 35 4
gpt4 key购买 nike

我在 WebApi 项目中使用 DryIoc。默认重用设置为 Reuse.InWebRequest。在某些情况下,我需要在请求期间解析新实例。使用 Reuse.InCurrentScope 时,我可以像这样解析新实例:

public class Foo : IFoo
{
public Foo(IMyDependency dep, IContainer container){
using (var scope = container.OpenScope()) {
var newInstance = scope.Resolve<IMyDependency>();
Assert.IsFalse(ReferenceEquals(dep, newInstance));
}
}
}

但是当使用 Request.InWebRequest 或 Request.InThread(根据文档,它们基本相同)时,不会创建新实例,但会重用已解析的实例。我也尝试使用 IContainer.CreateFacade() 但结果是一样的。

我想知道是否有一种方法可以在不从头创建新容器的情况下强制创建新实例(无论指定的重用如何)。

澄清更新

我不能使用 Reuse.Transient,因为在 99% 的时间里我都需要同一个实例。只有在滥用容器作为服务定位器时,我才需要一个新实例。

最佳答案

您可以注册服务两次,一次使用作用域,一次使用瞬时重用。对于临时服务,在注册时指定一个serviceKey,并在服务定位器中使用它来识别临时服务。

关于c# - 使用 Reuse.InWebRequest/Reuse.InThread 时使用 DryIoc 解析新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45884922/

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