public DialogsProvider(Config.RawData.DialogsContainer root) { Dialogs = new List <Dialog>(); DialogsTable = new Dictionary <string, Dialogs.Dialog>(); // fill support buttons SupportButtons = new Dictionary <string, Button>(); foreach (var btn in root.SupportButtons) { try { var type = Type.GetType(btn.Type); Button button = Activator.CreateInstance(type, btn) as Button; SupportButtons.Add(btn.Id, button); } catch (Exception e) { BotManager.Core?.LogController?.LogWarning(new DebugMessage($"Couldn't convert support button '{btn.Id}'", "DialogsProvider()", e)); } } // create root dialog try { RootDialog = new RootDialog(root as Config.RawData.Dialog); RootDialog.GetEditable().SupportButtons = GetButtons(root.Buttons); RegistrationDialog = new RegistrationDialog(root.RegistrationDialog, null); RegistrationDialog.GetEditable().SupportButtons = GetButtons(root.RegistrationDialog.Buttons); DialogsTable.Add(RootDialog.Id, RootDialog); Dialogs.Add(RootDialog); DialogsTable.Add(RegistrationDialog.Id, RegistrationDialog); Dialogs.Add(RegistrationDialog); } catch (Exception e) { BotManager.Core?.LogController?.LogCritical(new DebugMessage($"Couldn't initialize root dialog!", "DialogsProvider()", e)); throw e; } // fill other dialogs and bind supportButtons RootDialog.GetEditable().Dialogs = DialogInitializer(root, RootDialog); RegistrationDialog.GetEditable().Dialogs = DialogInitializer(root.RegistrationDialog, RegistrationDialog); }