Get info for all current Autofac-managed instances
我需要一个诊断/管理页面来显示Autofac在当前时间点正在管理什么。非常适合查找泄漏和错误。
有一种方法可以计算Autofac已解析的对象数。但是它很重,不应该在生产中使用。
有一种记录所有分辨率的方法。同样,不应在生产中使用它。
与那些解决方案不同,我所需要的只是当前管理对象的快照。是否可以不捕获每个解决方案事件并存储它(如上所述)呢?
Autofac将仅创建服务实例,但IDisposable服务除外,它不跟踪任何服务。如果要获得所有已解决的服务,则必须对其进行监视和记录。
IDisposable实例保存在IDisposer接口的私有实现的私有字段中。每个ILifetimeScope都包含其自己的IDisposer实例,并且如果不跟踪Lifetimescope的创建,就无法获得所有活动的ILifetimeScope。
跟踪实例创建并不像看起来那样繁重。您提供的链接是实现此类功能的良好起点。不要忘记使用WeakReference和ConditionalWeakTable以避免内存泄漏。
- 如果您只需要连续计数,是否有必要使用WeakReference?
-
@grokky仅在要访问实例时才需要WeakReference。如果您只想计算它们,则不需要它。