2017-03-18 17 views
1

現在の時点でAutofacが管理しているものを表示するには、診断/管理ページが必要です。漏れやバグを発見するのに適しています。現在のAutofac管理インスタンスすべての情報を取得

There is a way Autofacが解決しているオブジェクトの数を数えます。しかし、それは重く、生産に使用すべきではありません。

There is a wayすべての解像度を記録します。同様に、本番環境では使用しないでください。

これらのソリューションとは異なり、私が必要とするのは、現在管理されているオブジェクトのスナップショットだけです。これは可能ですか?すべての解像度イベントをキャプチャして保存する必要はありませんか? IDisposableサービスのために、それはすべてのサービスを追跡しないことを除い

答えて

1

Autofac、サービスのインスタンスを作成します。解決済みのサービスをすべて使用したい場合は、それらを監視してログに記録する必要があります。

IDisposableインスタンスは、IDisposerインターフェイスのプライベート実装のプライベートフィールドに保持されます。各ILifetimeScopeには独自のIDisposerインスタンスが含まれており、ライフタイムスコープの作成を追跡せずにすべてのアクティブを取得する方法はありません。ILifetimescope

インスタンスの作成を追跡することは、それほど重くはないようです。あなたが提供するリンクは、そのような機能を実装するための良い出発点です。メモリリークを防ぐには、WeakReferenceConditionalWeakTableを必ず使用してください。

+0

実行カウントを維持するだけの場合は、「WeakReference」を使用する必要がありますか? – grokky

+1

@grokkyインスタンスにアクセスしたい場合にのみWeakReferenceが必要です。あなたがそれらを数えたいだけなら、あなたはそれを必要としません。 –

関連する問題