【发布时间】:2020-04-13 16:49:00
【问题描述】:
假设我有一个对象的实例,由 Autofac 解析,如下所示:
ILifetimeScope scope = rootContainer....
var myService = scope.Resolve(myServiceType);
现在我只有myService。是否有任何 Autofac API 接受我的变量 myService 并将其处理掉(连同 Autofac 解析的所有依赖项)?
例如
// later at some point, something like this
rootContainer.DisposeOff(myService) // <-- this should dispose the lifetime scope of myService, i.e. dispose myService, along with its other dependencies.
注意几点:
- 我当然不能自己做
myService.Dispose(),因为这不会释放 Autofac 注入的子依赖项(因为 Autofac 控制着它们的生命周期)。 - 我身边只有
myService。这是我正在处理的图书馆的特殊性质。我当然可以自己存储scope变量并对其进行管理。那将是我最后的手段。只是想知道 Autofac 是否内置了一些东西。
【问题讨论】:
-
Autofac 有
OnRelease事件,它对您的情况会有所帮助,请查看docs -
可以修改注册服务的实现吗?
-
@Kazar 是的,我可以。
-
@PavelAnikhouski onrelease 事件略有不同。我没有什么可以清理自己的。当我准备好时,我只希望 autofac 提高版本。
标签: c# dependency-injection autofac lifetime-scoping