예제 #1
0
        /// <summary>
        /// Fügt eine neue Strategie für die spezielle Eigenschaft hinzu.
        /// </summary>
        public TStrategy Add <TResult, TStrategy>(Expression <Func <T, TResult> > method, TStrategy strategy)
            where TStrategy : DataCreationStrategy <TResult>
        {
            if (strategy == null)
            {
                throw new ArgumentNullException(nameof(strategy));
            }

            string name = ExpressionsExtensions.GetMemberInfoName(method);

            var propertyInfo = typeof(T).GetProperty(name);

            if (propertyInfo.PropertyType.Equals(typeof(TResult)))
            {
                if (Strategies.ContainsKey(name))
                {
                    Strategies.Remove(name);
                }

                strategy.Initialize(propertyInfo);
                Strategies.Add(name, new StrategyInfo {
                    Strategy = strategy, Name = name
                });
                return(strategy);
            }
            return(null);
        }
예제 #2
0
            public TStrategy Then <TResult, TStrategy>(Expression <Func <T, TResult> > method, TStrategy strategy) where TStrategy : DataCreationStrategy <TResult>
            {
                string name = ExpressionsExtensions.GetMemberInfoName(method);

                var propertyInfo = typeof(T).GetProperty(name);

                if (propertyInfo.PropertyType.Equals(typeof(TResult)))
                {
                    if (strategy != null)
                    {
                        strategy.Initialize(propertyInfo);

                        info.Name     = name;
                        info.Strategy = strategy;

                        dictionary.Add("_" + name, info);
                        return(strategy);
                    }
                    else if (dictionary.ContainsKey(name))
                    {
                        dictionary.Remove(name);
                    }
                }
                return(null);
            }
예제 #3
0
        /// <summary>
        /// Creates a violation
        /// </summary>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="propertyAccessMethod"></param>
        /// <param name="violationType"></param>
        /// <returns></returns>
        public DataCreationStrategy <T> CreateViolation <TResult>(Expression <Func <T, TResult> > propertyAccessMethod, ViolationType violationType)
        {
            var memberName = ExpressionsExtensions.GetMemberInfoName(propertyAccessMethod);

            if (String.IsNullOrWhiteSpace(memberName))
            {
                throw new ArgumentException(nameof(propertyAccessMethod));
            }

            return(CreateViolation(memberName, violationType));
        }
예제 #4
0
            public TStrategy Add <TResult, TStrategy>(Expression <Func <T, TResult> > method)
                where TStrategy : DataCreationStrategy <TResult>, new()
            {
                string name = ExpressionsExtensions.GetMemberInfoName(method);

                var propertyInfo = typeof(T).GetProperty(name);

                if (propertyInfo.PropertyType.Equals(typeof(TResult)))
                {
                    TStrategy strategy = new TStrategy();
                    strategy.Initialize(propertyInfo);

                    info.Name     = name;
                    info.Strategy = strategy;

                    dictionary.Add("_" + name, info);
                    return(strategy);
                }
                return(null);
            }
예제 #5
0
 public StringValidity Add(Expression <Func <T, string> > method)
 {
     return(Add <StringValidity>(ExpressionsExtensions.GetMemberInfoName(method)));
 }
예제 #6
0
 public BooleanValidity Add(Expression <Func <T, bool> > method)
 {
     return(Add <BooleanValidity>(ExpressionsExtensions.GetMemberInfoName(method)));
 }
예제 #7
0
 public DoubleValidity Add(Expression <Func <T, double> > method)
 {
     return(Add <DoubleValidity>(ExpressionsExtensions.GetMemberInfoName(method)));
 }
예제 #8
0
 public IntegerValidity Add(Expression <Func <T, int> > method)
 {
     return(Add <IntegerValidity>(ExpressionsExtensions.GetMemberInfoName(method)));
 }