예제 #1
0
        /// <summary>
        /// 创建随机对象
        /// </summary>
        /// <param name="config"></param>
        /// <returns></returns>
        internal static T CreateNotNull(Config config)
        {
            if (defaultCreator != null)
            {
                return(defaultCreator());
            }
            if (configNullCreator != null)
            {
                return(configNullCreator(config));
            }
            if (DefaultConstructor <T> .Type == AutoCSer.Metadata.DefaultConstructorType.None)
            {
                return(default(T));
            }
            if (isValueType)
            {
                T value = DefaultConstructor <T> .Constructor();

                MemberCreator(ref value, config);
                return(value);
            }
            else
            {
                object historyValue = config.TryGetValue(typeof(T));
                if (historyValue != null)
                {
                    return((T)historyValue);
                }
                T value = config.SaveHistory(DefaultConstructor <T> .Constructor());
                MemberCreator(ref value, config);
                return(value);
            }
        }
예제 #2
0
        /// <summary>
        /// 创建随机对象
        /// </summary>
        /// <param name="config"></param>
        /// <returns></returns>
        public static T Create(Config config = null)
        {
            if (defaultCreator != null)
            {
                return(defaultCreator());
            }
            if (configCreator != null)
            {
                if (config == null)
                {
                    config = Config.Default;
                }
                if (config.History == null)
                {
                    return(configCreator(config));
                }
                try
                {
                    return(configCreator(config));
                }
                finally { config.History.Clear(); }
            }
            if (DefaultConstructor <T> .Type == DefaultConstructorType.None)
            {
                return(default(T));
            }
            T value = DefaultConstructor <T> .Constructor();

            if (config == null)
            {
                config = Config.Default;
            }
            if (config.History == null)
            {
                MemberCreator(ref value, config);
            }
            else
            {
                try
                {
                    MemberCreator(ref value, config);
                }
                finally { config.History.Clear(); }
            }
            return(value);
        }