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 ) );
如何用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 ) );