Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改AutoFac默认行为_C#_Dependency Injection_Inversion Of Control_Autofac - Fatal编程技术网

C# 更改AutoFac默认行为

C# 更改AutoFac默认行为,c#,dependency-injection,inversion-of-control,autofac,C#,Dependency Injection,Inversion Of Control,Autofac,默认情况下,Autofac将保留其解析的任何一次性产品,直到生命周期范围结束。如果LifeTimeScope从未或很少结束,这将导致内存泄漏 这种默认设置对我们来说不太合适——我们更希望,每当我们解析一个一次性实例(即每个依赖项的实例)时,我们都能控制它的处理,而Autofac不会保留该实例。但是,如果一次性使用的是InstancePerLifeTimeScope或SingleInstance,我们希望Autofac保留并处置它 目前,这意味着我们必须在每次注册时调用ExternallyOwne

默认情况下,Autofac将保留其解析的任何一次性产品,直到生命周期范围结束。如果LifeTimeScope从未或很少结束,这将导致内存泄漏

这种默认设置对我们来说不太合适——我们更希望,每当我们解析一个一次性实例(即每个依赖项的实例)时,我们都能控制它的处理,而Autofac不会保留该实例。但是,如果一次性使用的是
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表示执行单个工作单元,我们将在整个生命周期范围内创建和处理数千个此类服务。然后创建更多范围。。。