ContainerControlledLifetimeManager和HierarchicalLifetimeManager之间的主要区别是什么?

时间:2017-02-08 14:20:08

标签: dependency-injection inversion-of-control unity-container

ContainerControlledLifetimeManager和HierarchicalLifetimeManager之间的一般区别是什么?我知道ContainerControlledLifetimeManager表示单例,即DI容器将为每个需要依赖的类型创建一个新实例。我阅读了有关Understanding Lifetime Managers的有用文章。我将容器创建的实例的哈希码与不同的生命周期管理器进行了比较。如果我使用ContainerControlledLifetimeManager,每个请求都有相同的实例,但是当我使用HierarchicalLifetimeManager时,我得到了不同的哈希码。正如文章中所写,每个子容器都将创建自己的实例。我不完全理解它。父母和孩子是否会有相同的实例?如果我没有孩子会怎么样?什么时候应该使用这个终身经理?请你能解释一下吗?

1 个答案:

答案 0 :(得分:8)

ContainerControlledLifetimeManager解析了作用于容器生命周期的已注册类型的单例实例

HierarchicalLifetimeManager解析了作用于执行解析的容器生命周期的已注册类型的单例实例(但不一定是注册类型的容器)

如果您的应用程序仅使用单个容器,则HierarchicalLifetimeManagerContainerControlledLifetimeManager

之间的行为没有区别

但是,如果您的应用程序为每个会话/请求创建子容器并使用这些子容器进行解析,那么您有效地获得每个会话/请求的已注册类型的单例实例