Пример #1
0
        public static void CreateNewUser(IPersistenceService db)
        {
            object newUser = null;

            Type[] userTypes      = Assembly.GetAssembly(typeof(User)).GetTypes().Where(x => x.IsSubclassOf(typeof(User))).ToArray();
            Type   userTypeChoice = null;

            do
            {
                Console.Write("Please select a user type (");
                for (int i = 0; i < userTypes.Length; i++)
                {
                    Console.Write(i + " " + userTypes[i].Name);
                    if (i < userTypes.Length - 1)
                    {
                        Console.Write(", ");
                    }
                }
                Console.Write("): ");
                if (!int.TryParse(Console.ReadLine(), out var choiceIndex))
                {
                    continue;
                }

                if (choiceIndex >= 0 && choiceIndex < userTypes.Length)
                {
                    userTypeChoice = userTypes[choiceIndex];
                }
            } while (userTypeChoice == null);

            newUser = Activator.CreateInstance(userTypeChoice);

            var props = userTypeChoice.GetProperties().Where(x => Attribute.IsDefined(x, typeof(PersistedAttribute)));

            foreach (var prop in props)
            {
                while (true)
                {
                    if (prop.Name == "Id")
                    {
                        break;
                    }
                    Console.Write($"Value for property '{prop.Name}': ");
                    string input = Console.ReadLine();
                    if (String.IsNullOrWhiteSpace(input))
                    {
                        continue;
                    }
                    try
                    {
                        object result = Transformers.GetFittingTransformerFromString(prop.PropertyType)(input);
                        prop.SetValue(newUser, result);
                        break;
                    }
                    catch (Exception e)
                    {
                        // ignored
                    }
                }
            }

            var genericCreate = db.GetType().GetMethod("Create").MakeGenericMethod(userTypeChoice);

            genericCreate.Invoke(db, new object[] { newUser });
            // ConfigurationManager.AppSettings.Set("IdCounter", ((User)newUser).Id.ToString());
            ConfigurationManager.AppSettings["IdCounter"] = ((User)newUser).Id.ToString();
            Console.WriteLine("User has been created");
            Console.WriteLine("--------------------");
        }