private void FillNameToRule() { Type factoryType = ruleFactory.GetType(); MethodInfo[] methods = factoryType.GetMethods(); foreach (MethodInfo method in methods) { if (method.ReturnType == typeof(Rule)) { string ruleName = method.Name.Replace("Create", ""); nameToRule.Add(ruleName, (Rule)method.Invoke(ruleFactory, null)); } } }
public Task Load(IRuleFactory factory, IBoardType boardType) { try { var manifest = Common.Update.Plugin.GetEmbeddedPluginManifest(_logger, factory.GetType().Assembly); if (manifest == null) { throw new NoManifestFoundException(); } _store.Add(manifest.Automatica.PluginGuid, manifest); _logicFactoryStore.Add(factory.RuleGuid, factory); _logger.LogDebug($"Init logic {factory.RuleName} {factory.RuleVersion}..."); var driverDbVersion = _dbContext.VersionInformations.SingleOrDefault(a => a.RuleGuid == factory.RuleGuid); var initNodeTemplates = false; if (driverDbVersion == null) { driverDbVersion = new VersionInformation { Name = factory.RuleName, Version = factory.RuleVersion.ToString(), RuleGuid = factory.RuleGuid }; initNodeTemplates = true; _dbContext.VersionInformations.Add(driverDbVersion); } else if (factory.RuleVersion > driverDbVersion.VersionData) { initNodeTemplates = true; driverDbVersion.Name = factory.RuleName; driverDbVersion.Version = factory.RuleVersion.ToString(); } _localizationProvider.LoadFromAssembly(factory.GetType().Assembly); if (initNodeTemplates || factory.InDevelopmentMode) { _logger.LogDebug($"InitRuleTemplates for {factory.RuleName}..."); using (var db = new AutomaticaContext(_config)) { factory.InitTemplates(new RuleTemplateFactory(db, _config)); db.SaveChanges(); } _logger.LogDebug($"InitRuleTemplates for {factory.RuleName}...done"); } _dbContext.SaveChanges(true); } catch (NoManifestFoundException) { // ignore } catch (Exception e) { _logger.LogError($"Could not load Rule {factory.RuleName} {e}", e); } return(Task.CompletedTask); ; }