SimpleInjector等同于Unity的AsPerResolve生命周期管理器

时间:2014-03-03 21:09:40

标签: unity-container simple-injector

Unity有一个AsPerResolve生命周期管理器。 SimpleInjector有类似的东西吗?什么是等价的?

Unity对AsPerResolve的定义是:表示应在同一构建对象图中重用实例

2 个答案:

答案 0 :(得分:1)

Unity的AsPerResolve没有确切的等价物;或者每个对象图,因为它通常被称为。 Simple Injector中没有每个对象图生活方式的原因是它是一个非常罕见的特征,很容易引起问题。

在大多数情况下,实例必须按要求确定范围,例如HTTP requestWCF operation。使用每个对象图生活方式,您仍然可以为每个请求设置多个实例,这可能会产生不必要的副作用,并且很容易引起。例如,通常使用工厂推迟创建对象图的一部分,在装饰器中注入Func<T>或类似的东西。由于对象图分为两部分(或更多部分),因此会在该请求中产生额外的每个对象图实例,但这实际上很难检测到。

因此,使用Simple Injector模拟每个对象图生活方式的方法是使用范围生活方式,很可能是LifetimeScopeLifestyle

这意味着您必须通过调用GetInstance将呼叫包裹到BeginLifetimeScope(),例如:

using (container.BeginLifetimeScope())
{
    container.GetInstance<SomeRootObject>();
}

这实际上会产生同样的效果。

答案 1 :(得分:0)

我认为SimpleInjector ParaGraph的生活方式将是你想要的。查看documentation on it