コード例 #1
0
        private StrongTypeRulesBase GetStrongTypedRule(Rule oRuleToGet)
        {
            // Try to get from cache
            StrongTypeRulesBase oStrongTypedRule =
                GetStrongTypedRuleFromCache(oRuleToGet);

            if (oStrongTypedRule == null)
            {
                // Adds to cache
                PrecompileRules(new Rule[] { oRuleToGet });
            }

            // Get from cache - now it should exist
            oStrongTypedRule =
                GetStrongTypedRuleFromCache(oRuleToGet);

            // Validate
            if (oStrongTypedRule == null)
            {
                throw new TisException(
                          "Fatal error: PrecompileRules called for rule [{0}]," +
                          "but the rule is not in cache",
                          oRuleToGet);
            }

            return(oStrongTypedRule);
        }
コード例 #2
0
        private StrongTypeRulesBase[] GetRulesFromAssembly(
            Assembly oAssembly,
            string[] RulesTypeNames)
        {
            StrongTypeRulesBase[] RuleObjects =
                new StrongTypeRulesBase[RulesTypeNames.Length];

            for (int i = 0; i < RulesTypeNames.Length; i++)
            {
                RuleObjects[i] = GetRuleFromAssembly(
                    oAssembly,
                    RulesTypeNames[i]);
            }

            return(RuleObjects);
        }
コード例 #3
0
        public void PrecompileRules(Rule[] Rules)
        {
            if (Rules == null)
            {
                ExceptionUtil.RaiseArgumentNullException(
                    "Rules",
                    "Can't be null",
                    System.Reflection.MethodInfo.GetCurrentMethod());
            }

            lock (this)
            {
                ArrayBuilder oRulesToCompile = new ArrayBuilder();

                // Filter out rules that are already in cache and
                // redundant rules
                foreach (Rule oRule in Rules)
                {
                    if (GetStrongTypedRuleFromCache(oRule) != null)
                    {
                        // Already compiled
                        continue;
                    }

                    oRulesToCompile.AddIfNotExists(oRule);
                }

                Rule[] RulesToCompile = (Rule[])oRulesToCompile.GetArray(
                    typeof(Rule));

                StrongTypeRulesBase[] StrongTypedRules =
                    m_oStrongTypedRuleBuilder.CreateNewRules(RulesToCompile);

                for (int i = 0; i < RulesToCompile.Length; i++)
                {
                    Rule oRule = RulesToCompile[i];
                    StrongTypeRulesBase oStrongTypedRule = StrongTypedRules[i];

                    AddStrongTypedRuleToCache(
                        oRule,
                        oStrongTypedRule);
                }
            }
        }
コード例 #4
0
        private StrongTypeRulesBase GetRuleFromAssembly(
            Assembly oAssembly,
            string sRuleTypeName)
        {
            string sClassTypeFullName = GetRuleFullTypeName(sRuleTypeName);

            Type oRuleType = oAssembly.GetType(sClassTypeFullName);

            if (oRuleType == null)
            {
                throw new TisException(
                          "Error! can not get type [{0}] from compiled assembly [{1}]",
                          sClassTypeFullName,
                          oAssembly.CodeBase);
            }

            object[] Args = { m_PredefinedFunctions };

            StrongTypeRulesBase oRuleObj = (StrongTypeRulesBase)(Activator.CreateInstance(
                                                                     oRuleType,
                                                                     Args));

            return(oRuleObj);
        }
コード例 #5
0
 private void AddStrongTypedRuleToCache(
     Rule oRule,
     StrongTypeRulesBase oStrongTypedRule)
 {
     m_oRulesCache[oRule] = oStrongTypedRule;
 }