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); }
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); }
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); } } }
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); }
private void AddStrongTypedRuleToCache( Rule oRule, StrongTypeRulesBase oStrongTypedRule) { m_oRulesCache[oRule] = oStrongTypedRule; }