2017-03-18 79 views
1

我需要一个诊断/管理页面来显示Autofac在当前时间点正在管理的内容。很适合查找泄漏和错误。获取所有当前Autofac管理的实例的信息

There is a way来计算Autofac解析对象的数量。然而它很重,不应该用于生产。

There is a way记录所有分辨率。同样,它不应该用于生产。

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

回答

1

Autofac创建服务的情况下,除了IDisposable服务不跟踪任何服务。如果你想拥有所有解决的服务,你将不得不监视并记录它们。

IDisposable实例持续存在于IDisposer接口的私有实现的私有字段中。每个ILifetimeScope都包含自己的IDisposer实例,并且无法跟踪生命周期创建,因此无法获取所有活动的ILifetimescope

跟踪创建实例并不像看起来那么沉重。您提供的链接是实施此功能的好起点。不要忘记使用WeakReferenceConditionalWeakTable来避免任何内存泄漏。

+0

是否有必要使用'WeakReference',如果你只是保持运行计数? – grokky

+1

@grokky只有当你想访问实例时,你才需要'WeakReference'。如果你只想数它们,你就不需要它。 –

相关问题