在解析类型时是否可以更改已配置的生命周期管理器?

时间:2011-02-08 13:16:03

标签: .net unity-container

我将Unity配置为能够使用我自己的生命周期管理器(每个http请求)解析多种类型。现在在一个特殊的初始化方法中,我需要获得已解析类型结构的新实例,并且我不希望这些实例被存储并重用于后续Resolve调用=对于这种特殊方法我需要瞬态生命周期管理器。

我想避免第二个容器配置,因为它将是具有不同生命周期管理器的第一个容器配置的副本。在解析类型时是否有可能以某种方式覆盖生命周期管理器配置?

我的previous question已经提出了这个问题,因为我正在寻找更好的方法。

编辑:

我知道我可以创建多个命名注册,但由于更改了生命周期管理器,因此需要再次创建大部分配置。

2 个答案:

答案 0 :(得分:2)

您可以使用子容器进行特殊解析。只需在子容器中为您关注的类型注册一个新的生命周期管理器(TransientLifetimeManager听起来像您想要的那样)。它将从父母的注册中获取其他所有内容,因此您无需重做大量注册。

但我同意Aliostad的说法 - 这种设计闻起来有些不对劲,但如果没有更多关于你正在做什么的细节,我就无法提出替代方案。

答案 1 :(得分:1)

我认为 - 正如您所指出的那样 - 我们可以使用两个单独的注册,具有两种不同的生命周期配置。但是你似乎对这种设置并不满意,而且你希望在注册时通过生命周期

我的建议是创建一个额外生命周期的扩展方法,并检查容器是否有这样的注册,如果它不存在,它会注册它并返回你需要的设置。

但说实话,我确实遇到了这种方法的问题,即使这种方法存在于框架中。 IoC容器删除了依赖于依赖的知识,但是您将这些知识添加回客户端/依赖反对 IoC原则。