public Faker(string dirPath) { List <Assembly> allAssemblies = new List <Assembly>(); foreach (string dll in Directory.GetFiles(dirPath, "*.dll")) { allAssemblies.Add(Assembly.LoadFile(dll)); } collectionTypeGenerator = new Dictionary <string, ICollectionGenerator>(); basicTypeGenerator = new Dictionary <Type, IGenerator>(); var doubleGenerator = new DoubleGenerator(); basicTypeGenerator.Add(doubleGenerator.GetGeneratorType(), doubleGenerator); var uintGenerator = new UIntGenerator(); basicTypeGenerator.Add(uintGenerator.GetGeneratorType(), uintGenerator); var floatGenerator = new FloatGenerator(); basicTypeGenerator.Add(floatGenerator.GetGeneratorType(), floatGenerator); var charGenerator = new CharGenerator(); basicTypeGenerator.Add(charGenerator.GetGeneratorType(), charGenerator); var stringGenerator = new StringGenerator(); basicTypeGenerator.Add(stringGenerator.GetGeneratorType(), stringGenerator); var longGenerator = new LongGenerator(); basicTypeGenerator.Add(longGenerator.GetGeneratorType(), longGenerator); var datetimeGenerator = new DateGenerator(); basicTypeGenerator.Add(datetimeGenerator.GetGeneratorType(), datetimeGenerator); foreach (var asm in allAssemblies) { Console.WriteLine(asm.FullName); var types = asm.GetTypes().Where(t => t.GetInterfaces().Where(i => i.Equals(typeof(IGenerator))).Any()); foreach (var type in types) { var plugin = asm.CreateInstance(type.FullName) as IGenerator; Type t = plugin.GetGeneratorType(); if (!basicTypeGenerator.ContainsKey(t)) { basicTypeGenerator.Add(plugin.GetGeneratorType(), plugin); } } } var listGenerator = new ListGenerator(); collectionTypeGenerator.Add(listGenerator.GetGeneratorType().Name, listGenerator); recursionList = new List <Type>(); }