public static FooMultiton GetInstance(object key)
 {
     lock (_instances)
     {
         FooMultiton instance;
         if (!_instances.TryGetValue(key, out instance))
         {
             instance = new FooMultiton();
             _instances.Add(key, instance);
         }
     }
     return(instance);
 }
 public static FooMultiton GetInstance(object key)
 {
     lock (_instances)
     {
         FooMultiton instance;
         // if it doesn't exist, create it and store it
         if (!_instances.TryGetValue(key, out instance))
         {
             instance = new FooMultiton();
             _instances.Add(key, instance);
         }
         // always return the same ("singleton") instance for this key
         return(instance);
     }
 }