/// <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); }
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); }