.net 解析类型时是否可以更改配置的生存期管理器?

.net 解析类型时是否可以更改配置的生存期管理器?,.net,unity-container,.net,Unity Container,我将Unity配置为能够使用自己的生命周期管理器(每个http请求)解析多种类型。现在,在一个特殊的初始化方法中,我需要获得解析类型结构的新实例,我不希望这些实例被存储并重新用于后续的Resolvecalls=对于这个特殊方法,我需要瞬态生命周期管理器 我希望避免第二个容器配置,因为它将是第一个容器的副本,具有不同的生命周期管理器。在解析类型时是否可能以某种方式重写生存期管理器配置 这个问题与我的关系密切,因为我正在寻找更好的方法 编辑: 我知道我可以创建多个命名注册,但这需要重新创建大部分配置

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

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

这个问题与我的关系密切,因为我正在寻找更好的方法

编辑:


我知道我可以创建多个命名注册,但这需要重新创建大部分配置,因为更改了生存期管理器。

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

我的建议是创建一个扩展方法,该方法需要额外的生存期,并检查容器是否存在此类注册,如果容器不存在,它将注册它并返回所需的设置


但老实说,我确实对这种方法有问题,即使框架中存在这样的方法。IoC容器删除依赖项的依赖项的知识,但您将此知识添加回客户端/依赖项,这违反了IoC原则。

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


但我同意Aliostad的观点——这种设计闻起来有点不对劲,但如果没有更多的细节,我真的无法提出替代方案。

设计肯定是错误的。问题是我们正在将参数(通过ParameterOverrides)传递给所创建的依赖关系层次结构中的一个对象。对于普通处理,这是可以的。但是对于这个特殊的初始化方法,我们需要传递其他参数。带有此参数的Instnace不能用于请求的其余部分。