次のコードを検討してください。
public class Test
{
private static readonly Lazy<Test> Lazy = new Lazy<Test>(() => new Test());
private Test()
{
Console.WriteLine("Calling constractor");
}
public static Test Instance
{
get { return Lazy.Value; }
}
public void Something()
{
}
}
上記のクラスからインスタンスを作成する場合は、コンストラクターのアクセス修飾子をパブリックに変更し、このクラスからインスタンスを取得するために次のコードを記述します。
Type type = typeof(Test);
IEnumerable<Type> types = AppDomain.CurrentDomain.GetAssemblies().ToList()
.SelectMany(s => s.GetTypes())
.Where(type.IsAssignableFrom);
Type strtegy = types.FirstOrDefault(x => x.IsClass);
for (int i = 0; i < 10; i++)
{
Activator.CreateInstance(strtegy);
}
このコードを使用する場合、その呼び出し Activator.CreateInstance
コンストラクターが呼び出すたびに、クラスのインスタンスが多数あります。
リフレクションでシングルトンクラスからインスタンスを取得するにはどうすればよいですか?