C# 更改AutoFac默认行为
默认情况下,Autofac将保留其解析的任何一次性产品,直到生命周期范围结束。如果LifeTimeScope从未或很少结束,这将导致内存泄漏 这种默认设置对我们来说不太合适——我们更希望,每当我们解析一个一次性实例(即每个依赖项的实例)时,我们都能控制它的处理,而Autofac不会保留该实例。但是,如果一次性使用的是C# 更改AutoFac默认行为,c#,dependency-injection,inversion-of-control,autofac,C#,Dependency Injection,Inversion Of Control,Autofac,默认情况下,Autofac将保留其解析的任何一次性产品,直到生命周期范围结束。如果LifeTimeScope从未或很少结束,这将导致内存泄漏 这种默认设置对我们来说不太合适——我们更希望,每当我们解析一个一次性实例(即每个依赖项的实例)时,我们都能控制它的处理,而Autofac不会保留该实例。但是,如果一次性使用的是InstancePerLifeTimeScope或SingleInstance,我们希望Autofac保留并处置它 目前,这意味着我们必须在每次注册时调用ExternallyOwne
InstancePerLifeTimeScope
或SingleInstance
,我们希望Autofac保留并处置它
目前,这意味着我们必须在每次注册时调用ExternallyOwned
有没有办法改变Autofacs的默认行为,或者通过其他方式对生成器或容器进行修补,以使所有注册以编程方式归外部所有?如果作用域没有结束,这本身不是内存泄漏吗?这似乎是一个非常奇怪的要求。@DavidG正如我所说,它很少结束。但是我们经常更新很多服务,这可能会导致在生命周期范围结束之前出现数百MB的未使用服务。您能否在这里提供导致该问题的代码示例。似乎存在着糟糕的设计-如果我们讨论内存缓存需要过期等问题,请为您提供更多详细信息question@Vladimir. 我们解析一个
Func()
。'IService'是IDisposable
,并注册为InstancePerDependence
(这是必需的,因为每次调用func时字符串都不同)。LifeTimeScope表示执行单个工作单元,我们将在一个生命周期作用域中创建和处理数千个此类服务。然后创建更多作用域…如果作用域没有结束,这本身不是内存泄漏吗?这似乎是一个非常奇怪的要求。@DavidG正如我所说,它很少结束。但是我们经常更新很多服务,这可能会导致在生命周期范围结束之前出现数百MB的未使用服务。您能否在这里提供导致该问题的代码示例。似乎存在着糟糕的设计-如果我们讨论内存缓存需要过期等问题,请为您提供更多详细信息question@Vladimir. 我们解析一个Func()
。'IService'是IDisposable
,并注册为InstancePerDependence
(这是必需的,因为每次调用func时字符串都不同)。LifeTimeScope表示执行单个工作单元,我们将在整个生命周期范围内创建和处理数千个此类服务。然后创建更多范围。。。