我在 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
,并在服务定位器中使用它来识别临时服务。
我是一名优秀的程序员,十分优秀!