示例#1
0
        /// <summary>
        /// Gets the knowledge instance.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="name">The name.</param>
        /// <param name="validationCase">The validation case.</param>
        /// <param name="type">The type.</param>
        /// <param name="logger">The logger.</param>
        /// <returns></returns>
        protected T GetKnowledgeInstance <T>(String name, kFoldValidationCase validationCase, WebFVExtractorKnowledgeType type, ILogBuilder logger) where T : class, IWebFVExtractorKnowledge, new()
        {
            IWebFVExtractorKnowledge knowledge = null;
            Boolean found = false;

            if (type == WebFVExtractorKnowledgeType.aboutCategory)
            {
                if (!registry[validationCase].TryGetValue(name, out knowledge))
                {
                    lock (createKnowledgeLock)
                    {
                        if (!registry[validationCase].ContainsKey(name))
                        {
                            statistics[name] = 0;
                            knowledge        = CreateKnowledgeInstance <T>(name, validationCase, type, logger);
                            registry[validationCase][name] = knowledge;
                        }
                        else
                        {
                            knowledge = registry[validationCase][name];
                        }
                    }
                }
                else
                {
                    found = true;
                }
            }
            else
            {
                if (!registryForCases.TryGetValue(name, out knowledge))
                {
                    lock (createCaseKnowledgeLock)
                    {
                        if (!registryForCases.ContainsKey(name))
                        {
                            statistics[name]       = 0;
                            knowledge              = CreateKnowledgeInstance <T>(name, validationCase, type, logger);
                            registryForCases[name] = knowledge;
                        }
                        else
                        {
                            knowledge = registryForCases[name];
                        }
                    }
                }
                else
                {
                    found = true;
                }
            }


            if (doKeepStatisticsOnAccess)
            {
                if (found)
                {
                    statistics[name]++;
                }
            }

            return(knowledge as T);
        }
示例#2
0
        protected T CreateKnowledgeInstance <T>(String name, kFoldValidationCase validationCase, WebFVExtractorKnowledgeType type, ILogBuilder logger) where T : class, IWebFVExtractorKnowledge, new()
        {
            folderNode folder = validationCase.caseFolder;

            if (type == WebFVExtractorKnowledgeType.aboutDocumentSet)
            {
                folder = validationCollection.caseFolder;
                if (DoShareCaseKnowledge)
                {
                    folder = ExperimentSharedCasesFolder;
                }
            }


            T knowledge = new T();

            knowledge.name = name;
            knowledge.type = type;

            try
            {
                knowledge.Deploy(folder, logger);
            } catch (aceGeneralException ex)
            {
                validationCase.context.errorNotes.LogException("Create Knowledge Instance (" + typeof(T).Name + ") error for [" + name + "] in fold [" + validationCase.name + "]:" + ex.title, ex);
            }

            return(knowledge);
        }