ネストされたクラスから作成された Singleton インスタンスを使用しています。このインスタンスは、Singleton が破棄されるときにクリアされるいくつかの静的コレクションを保持しますが、適切にガベージ コレクションされていない null 以外の破棄された Singleton への参照を取得することが問題です。
シングルトン インスタンスを完全に破棄してガベージ コレクションを行うタイミングと方法を知りたいので、破棄 (および null への設定) 後にインスタンスが再度クエリされたときに、新しいインスタンスが作成されます。
Singleton インスタンスに次のネストされたパターンを使用しています。
public class SingletonClass : IDisposable
{
private List<string> _collection;
private SingletonClass()
{
}
public static SingletonClass Instance
{
get
{
return Nested.Instance; //line 1 - this line returns the non-null instance after dispose and setting the Singleton instance to null which is causing problems
}
}
private void Init()
{
_collection = new List<string>();
//Add data to above collection
}
public void Dispose()
{
//Release collection
_collection.Clear();
_collection = null;
}
class Nested
{
static Nested()
{
Instance = new SingletonClass();
Instance.Init();
}
internal static readonly SingletonClass Instance;
}
}
行 1 の問題は、クライアント クラスから SingletonClass を破棄した後、_collection オブジェクトが null になり、SingletonClass インスタンスは = null に設定した後でも非 null のままになることです。