public void Add <TClass, TPropertyType, TGenerator>(Expression <Func <TClass, TPropertyType> > expression) { Expression body = expression.Body; if (body.NodeType != ExpressionType.MemberAccess) { throw new FakerException("Invalid lambda expression"); } IBaseGenerator generator = (IBaseGenerator)Activator.CreateInstance(typeof(TGenerator)); if (!generator.CanGenerate(typeof(TPropertyType))) { throw new FakerException("Illegal generator"); } if (customGenerators.ContainsKey(typeof(TClass))) { Dictionary <MemberInfo, IBaseGenerator> innerDict = customGenerators[typeof(TClass)]; innerDict.Add(((MemberExpression)body).Member, generator); } else { Dictionary <MemberInfo, IBaseGenerator> innerDict = new Dictionary <MemberInfo, IBaseGenerator>(); innerDict.Add(((MemberExpression)body).Member, generator); customGenerators.Add(typeof(TClass), innerDict); } }
private bool GeneratorExists(Type t, out IBaseGenerator gen) { gen = null; foreach (IBaseGenerator generator in generators) { Type tmp = t; if (t.IsGenericType) { tmp = t.GetGenericTypeDefinition(); } if (generator.CanGenerate(tmp)) { gen = generator; return(true); } } return(false); }
private void LoadPlugins() { string pluginPath = "D:\\3course\\5sem\\SPP\\Faker\\Plugins"; List <Assembly> dlls = new List <Assembly>(); string[] f = Directory.GetFiles(pluginPath, "*.dll"); foreach (string s in f) { dlls.Add(Assembly.LoadFrom(s)); } foreach (Assembly a in dlls) { foreach (Type t in a.GetTypes()) { if (t.GetInterface(nameof(IBaseGenerator)) != null) { IBaseGenerator d = (IBaseGenerator)Activator.CreateInstance(t); generators.Add(d); } } } }
public void AddGenerator(IBaseGenerator generator) { generators.Add(generator); }
private static void AddGeneratorToDictionary(IBaseGenerator generator, Dictionary <Type, IBaseGenerator> dictionary) { dictionary.Add(generator.GenerateType, generator); }
public bool FieldOrPropertyHasCustomGenerator(Type classType, string memberName /*MemberInfo member*/, out IBaseGenerator gen) { Dictionary <MemberInfo, IBaseGenerator> innerDict = customGenerators[classType]; foreach (KeyValuePair <MemberInfo, IBaseGenerator> pair in innerDict) { if (pair.Key.Name.Equals(memberName)) { gen = pair.Value; return(true); } } gen = null; return(false); }