using System.Collections.Generic;
namespace Creational.Singleton
public interface IDatabase
int GetPopulation(string cityName);
public class SingletonDatabase : IDatabase
private Dictionary<string, int> capitals;
private SingletonDatabase()
capitals = File.ReadAllLines("capitals.txt").Batch(2)
.ToDictionary(l => l.ElementAt(0).Trim(), l => int.Parse(l.ElementAt(1).Trim()));
public int GetPopulation(string cityName)
return capitals[cityName];
private static Lazy<SingletonDatabase> instance =
new Lazy<SingletonDatabase>( () => new SingletonDatabase());
public static SingletonDatabase Instance => instance.Value;
static void Main(string[] args)
var db = SingletonDatabase.Instance;
db.GetPopulation("Tokyo");
public class SingletonTest
public void IsSingletonTest()
var db = SingletonDatabase.Instance;
var db2 = SingletonDatabase.Instance;