关于.net:获取当前所有由Autofac管理的实例的信息

Get info for all current Autofac-managed instances

我需要一个诊断/管理页面来显示Autofac在当前时间点正在管理什么。非常适合查找泄漏和错误。

有一种方法可以计算Autofac已解析的对象数。但是它很重,不应该在生产中使用。

有一种记录所有分辨率的方法。同样,不应在生产中使用它。

与那些解决方案不同,我所需要的只是当前管理对象的快照。是否可以不捕获每个解决方案事件并存储它(如上所述)呢?


Autofac将仅创建服务实例,但IDisposable服务除外,它不跟踪任何服务。如果要获得所有已解决的服务,则必须对其进行监视和记录。

IDisposable实例保存在IDisposer接口的私有实现的私有字段中。每个ILifetimeScope都包含其自己的IDisposer实例,并且如果不跟踪Lifetimescope的创建,就无法获得所有活动的ILifetimeScope

跟踪实例创建并不像看起来那样繁重。您提供的链接是实现此类功能的良好起点。不要忘记使用WeakReferenceConditionalWeakTable以避免内存泄漏。