Dependency injection 通过嵌套容器的Web API、DI和对象生存期?

Dependency injection 通过嵌套容器的Web API、DI和对象生存期?,dependency-injection,structuremap,asp.net-web-api,Dependency Injection,Structuremap,Asp.net Web Api,好的,我将StructureMap连接到我的Web Api应用程序(在StackOverflow和Internet上的其他地方有很多示例)。我对WebAPI中对象生命周期维护的理解是,它是通过嵌套容器完成的 对于通过嵌套容器进行对象生命周期维护的整个想法来说,Raven的session对象必须在子容器中作为临时单例创建。现在,我在父容器中定义了IDocumentStore,范围为singletonIDocumentSession也在父容器中定义,但作用域为HttpContext。当请求传入时,调

好的,我将StructureMap连接到我的Web Api应用程序(在StackOverflow和Internet上的其他地方有很多示例)。我对WebAPI中对象生命周期维护的理解是,它是通过嵌套容器完成的

对于通过嵌套容器进行对象生命周期维护的整个想法来说,Raven的session对象必须在子容器中作为临时单例创建。现在,我在父容器中定义了
IDocumentStore
,范围为singleton
IDocumentSession
也在父容器中定义,但作用域为HttpContext。当请求传入时,调用
BeginScope()
,将创建嵌套容器,但其中的
IDocumentSession
对象将从父对象继承,而不是创建

我不明白这是怎么回事。如果对象不是在子容器中作为临时单例创建的,而是从父容器继承的,那么在释放嵌套容器时,它将返回父容器。这就破坏了整个想法。另一方面,如果会话要在嵌套容器中作为临时单例创建,那么如何实现呢?如何验证这种设置的正确性

如果我按照Web请求设置IDocumentSession,那么为什么需要 首先是嵌套容器

在这种情况下,不需要嵌套容器


通常情况下,嵌套容器本身的必要性甚至值得怀疑。甚至(一个支持子容器的容器)都可以在下一版本的Castle Windsor中一起使用。

既然您根据Web请求定义了
IDocumentSession
,为什么还需要子容器?生活方式的“短暂单身”到底是什么?这对我来说是新的。@Steven,这是我困惑的根源。如果我根据Web请求设置
IDocumentSession
,那么为什么首先需要嵌套容器(因为父级管理生命周期)。您可以在子容器中创建实例,然后在完成后处置整个事件,也可以让父容器为您管理它。”Transient singleton'=在父容器(即For().Use())中将对象定义为Transient,然后在子容器中将其创建为singleton,因此“Transient singleton”-用词不当。“Transient singleton”,我宁愿称为“子容器范围”:-)我同意,不会有。但是,Web Api上下文中的每个DI实现都使用嵌套容器。查看或查看StructureMap.MVC4 nuget源代码。然而,嵌套容器方法可能是特定于StructureMap的,因为这是我选择的IoC容器,我正在寻找解决方案,使用它+谢谢你的帮助。