Unity有一个AsPerResolve生命周期管理器。 SimpleInjector有类似的东西吗?什么是等价的?
Unity对AsPerResolve的定义是:表示应在同一构建对象图中重用实例
答案 0 :(得分:1)
Unity的AsPerResolve
没有确切的等价物;或者每个对象图,因为它通常被称为。 Simple Injector中没有每个对象图生活方式的原因是它是一个非常罕见的特征,很容易引起问题。
在大多数情况下,实例必须按要求确定范围,例如HTTP request或WCF operation。使用每个对象图生活方式,您仍然可以为每个请求设置多个实例,这可能会产生不必要的副作用,并且很容易引起。例如,通常使用工厂推迟创建对象图的一部分,在装饰器中注入Func<T>
或类似的东西。由于对象图分为两部分(或更多部分),因此会在该请求中产生额外的每个对象图实例,但这实际上很难检测到。
因此,使用Simple Injector模拟每个对象图生活方式的方法是使用范围生活方式,很可能是LifetimeScopeLifestyle。
这意味着您必须通过调用GetInstance
将呼叫包裹到BeginLifetimeScope()
,例如:
using (container.BeginLifetimeScope())
{
container.GetInstance<SomeRootObject>();
}
这实际上会产生同样的效果。
答案 1 :(得分:0)
我认为SimpleInjector ParaGraph的生活方式将是你想要的。查看documentation on it。