public class TemparatureConverter { public Dictionary Dictionary { get; private set; } = null; public TemparatureConverter() { IEnumerable temparatureUnitTypes = AppDomain.CurrentDomain.GetAssemblies().SelectMany(assembly => assembly.GetTypes()).Where(type => type.GetInterfaces().Contains(typeof(ITemperatureUnit))); Dictionary = new Dictionary(temparatureUnitTypes.Count()); foreach (var temparatureUnitType in temparatureUnitTypes) Dictionary.Add(temparatureUnitType.Name, Activator.CreateInstance(temparatureUnitType) as ITemperatureUnit); } public float Convert(float value, ITemperatureUnit from, ITemperatureUnit to) { float celciusValue = from.ToCelcius(value); return to.FromCelcius(celciusValue); } // public List ConvertToAll(float value, ITemperatureUnit from) // { // List list = new List(Dictionary.Count); // foreach (var toUnitPair in Dictionary) // list.Add(Convert(value, from, toUnitPair.Value)); // return list; // } }