/// <summary> /// Creates new instance of skill. /// </summary> /// <param name="context">current dialog context</param> /// <param name="conversationStateProvider">provider for passing the state from context</param>> /// <returns>instance of unknowns</returns> public static Unknowns Instance(ITurnContext context, IConversationStateProvider conversationStateProvider) { if (_instance == null) { lock (padlock) if (_instance == null) { _instance = new Unknowns(context, conversationStateProvider); } } return(_instance); }
/// <summary> /// Returns wanted skill, if there exist one with such a name. /// </summary> /// <param name="key">skill's name</param> /// <param name="context">used context</param> /// <param name="conversationStateProvider">given conversation provider to access BrainState</param> /// <returns>wanted skill, if found, null otherwise</returns> public ISkill GetSkill(string key, ITurnContext context, IConversationStateProvider conversationStateProvider) { // if it does exist, read it and return it if (_skills.TryGetValue(key, out ISkill instance)) { instance = _skills[key]; } else { // First time - call to init an instance switch (key) { // TODO if would be nice, if this would be classfiles processor on directory - not to type every single skill in factory case "greetings": instance = Greetings.Instance(context, conversationStateProvider); break; case "retorts": instance = Retorts.Instance(context, conversationStateProvider); break; /*case "questions": * instance = Questions.Instance(context, conversationStateProvider); * break;*/ case "unknowns": instance = Unknowns.Instance(context, conversationStateProvider); break; } // If obtained instance, add it to known skills if (instance != null) { _skills.Add(key, instance); } } return(instance); }