DryIOC相当于Unity的PerResolveLifetimeManager

DryIOC equivalent of Unity's PerResolveLifetimeManager

如何用DryIoc模拟Unity的PerResolveLifetimeManager

也就是说,在当前调用中重用以解决,但不是:

var a = container.Resolve<A>();
Assert( ReferenceEquals(a.B.D, a.C.D ) );

var a2 = container.Resolve<A>();
Assert( !ReferenceEquals(a.B.D, a2.B.D ) );

class A 
{
    public B B {get;}
    public C C {get;}
}

class B
{
    public D D {get;}
}

class C
{
    public D D {get;}
}

使用 Unity,我会用 PerResolveLifetimeManager 注册 D,但我不知道如何使用 DryIoc 实现它。

在我的应用程序中,A 可能是顶级视图模型,D 是 Entity Framework 上下文:每当我导航(即解析新视图模型)时,我想要创建一个在此视图模型处于活动状态时要使用的新上下文,我希望它由视图模型可能具有的所有依赖项共享。

这是 doc 和下面的示例:

container.Register<A>(setup: Setup.With(openResolutionScope: true));

container.Register<B>(Reuse.ScopedTo<A>());
container.Register<D>(Reuse.ScopedTo<A>());

var a = container.Resolve<A>();
Assert( ReferenceEquals(a.B.D, a.C.D ) );

var a2 = container.Resolve<A>();
Assert( !ReferenceEquals(a.B.D, a2.B.D ) );