我在 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% 的时间里我需要相同的实例。仅当将容器用作服务定位器时,我才需要一个新实例。