internal RulesEngine(
     IConditionsEvalEngine <TConditionType> conditionsEvalEngine,
     IRulesDataSource <TContentType, TConditionType> rulesDataSource,
     RulesEngineOptions rulesEngineOptions)
 {
     this.conditionsEvalEngine = conditionsEvalEngine;
     this.rulesDataSource      = rulesDataSource;
     this.rulesEngineOptions   = rulesEngineOptions;
 }
        /// <summary>
        /// Creates a new set of rules engine options with framework-configured defaults.
        /// </summary>
        /// <remarks>
        /// <para>MissingConditionBehavior = UseDataTypeDefault</para>
        /// <para>PriotityCriteria = TopmostRuleWins</para>
        /// <para>DataTypes.Boolean default = default(bool)</para>
        /// <para>DataTypes.Decimal default = default(decimal)</para>
        /// <para>DataTypes.Integer default = default(int)</para>
        /// <para>DataTypes.String default = string.Empty</para>
        /// </remarks>
        /// <returns></returns>
        public static RulesEngineOptions NewWithDefaults()
        {
            RulesEngineOptions rulesEngineOptions = new RulesEngineOptions
            {
                MissingConditionBehavior = MissingConditionBehaviors.UseDataTypeDefault,
                PriotityCriteria         = PriorityCriterias.TopmostRuleWins
            };

            rulesEngineOptions.DataTypeDefaults[DataTypes.Boolean] = default(bool);
            rulesEngineOptions.DataTypeDefaults[DataTypes.Decimal] = default(decimal);
            rulesEngineOptions.DataTypeDefaults[DataTypes.Integer] = default(int);
            rulesEngineOptions.DataTypeDefaults[DataTypes.String]  = string.Empty;

            return(rulesEngineOptions);
        }