我将Unity配置为能够使用我自己的生命周期管理器解析几种类型(每个http请求)。现在,在一个特殊的初始化方法中,我需要获取解析类型结构的新实例,我不希望这些实例被存储并在后续的Resolve调用中重用。对于这个特殊的方法,我需要瞬态生命周期管理器。
我希望避免第二个容器配置,因为它将是具有不同生命周期管理器的第一个容器的副本。是否有可能在解析类型时以某种方式覆盖生命周期管理器配置?
这个问题与我的previous question有关,因为我正在寻找更好的方法来做到这一点。
编辑:
我知道我可以创建多个命名注册,但仅仅因为更改生命周期管理器,就需要重新创建大部分配置。
发布于 2011-02-08 21:32:22
我认为--正如你已经注意到的--我们可以使用两个不同的注册和两个不同的生命周期配置。但您似乎对此设置不满意,并且希望在注册时通过整个生命周期。
我的建议是创建一个扩展方法,它需要一个额外的生命周期,并检查容器是否有这样的注册,如果它不存在,它会注册它并返回所需的设置。
但老实说,我确实对这种方法有问题,即使框架中存在这样的方法。IoC容器移除了依赖项的知识,但是您正在将这些知识添加回客户端/依赖项,这违反了的IoC原则。
发布于 2011-02-09 14:22:34
您可以使用子容器进行特殊解析。只需在子容器中为您关心的类型注册一个新的生命周期管理器(TransientLifetimeManager听起来像您想要的)。它将从家长那里获取其他所有注册,所以您不需要重做大量的注册。
但我同意Aliostad的观点--这个设计看起来不太对劲,但如果没有更多关于你在做什么的细节,我真的不能给出一个替代方案。
https://stackoverflow.com/questions/4933481
复制相似问题