Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
 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);
 }
Beispiel #3
0
        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);
                    }
                }
            }
        }
Beispiel #4
0
 public void AddGenerator(IBaseGenerator generator)
 {
     generators.Add(generator);
 }
Beispiel #5
0
 private static void AddGeneratorToDictionary(IBaseGenerator generator, Dictionary <Type, IBaseGenerator> dictionary)
 {
     dictionary.Add(generator.GenerateType, generator);
 }
Beispiel #6
0
        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);
        }