private static object CreateSettingsForProject(ITreeConfigNode node, IAppProject tt, Dictionary <string, object> dic_apgs, bool isShortVersion) { TypeBuilder tbAppGen = SettingsTypeBuilder.GetTypeBuilder(); // type builder for app generators foreach (var ttt in tt.ListAppProjectGenerators) { if (!string.IsNullOrWhiteSpace(ttt.PluginGuid)) { if (!string.IsNullOrWhiteSpace(ttt.PluginGeneratorGuid)) { var nds = (IGetNodeSetting)node; var nsettings = nds.GetSettings(ttt.Guid); dic_apgs[ttt.Name] = nsettings; SettingsTypeBuilder.CreateProperty(tbAppGen, ttt.Name, nsettings.GetType(), ttt.NameUi, ttt.Description); } } } SettingsTypeBuilder.CreateToString(tbAppGen, "Project"); Type apgsType = tbAppGen.CreateType(); var objAppGen = Activator.CreateInstance(apgsType); foreach (var dt in dic_apgs) { apgsType.InvokeMember(dt.Key, BindingFlags.SetProperty, null, objAppGen, new object[] { dt.Value }); } return(objAppGen); }
public object Run(AppSolution node) { TypeBuilder tbSettings = SettingsTypeBuilder.GetTypeBuilder(); // type builder for solutions ConstructorBuilder constructor = tbSettings.DefineDefaultConstructor(MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName); Config cfg = (Config)node.GetConfig(); var dic_groups = new Dictionary <string, object>(); foreach (var t in node.DicPluginsGroupSettings) { string groupName = t.Value.Name; SettingsTypeBuilder.CreateProperty(tbSettings, t.Value.Name, typeof(Object), t.Value.Name, t.Value.Description); dic_groups[groupName] = t.Value; } if (dic_groups.Count == 0) { return(null); } Type settingsType = tbSettings.CreateType(); object objSettings = Activator.CreateInstance(settingsType); foreach (var dt in dic_groups) { settingsType.InvokeMember(dt.Key, BindingFlags.SetProperty, null, objSettings, new object[] { dt.Value }); } return(objSettings); }
//private static object CreateSettingsForProject(ITreeConfigNode node, AppProject tt, Dictionary<string, object> dic_apgs, bool isShortVersion) //{ // TypeBuilder tbAppGen = SettingsTypeBuilder.GetTypeBuilder(); // type builder for app generators // foreach (var ttt in tt.ListAppProjectGenerators) // { // if (!string.IsNullOrWhiteSpace(ttt.PluginGuid)) // { // if (!string.IsNullOrWhiteSpace(ttt.PluginGeneratorGuid)) // { // Dictionary<string, object> dic_gs = new Dictionary<string, object>(); // object objGen = null; // objGen = CreateSettingsForAppProjectGenerator(node, ttt, dic_gs, isShortVersion); // if (dic_gs.Count > 0) // { // dic_apgs[ttt.Name] = objGen; // SettingsTypeBuilder.CreateProperty(tbAppGen, ttt.Name, typeof(Object), ttt.NameUi, ttt.Description); // } // } // } // } // SettingsTypeBuilder.CreateToString(tbAppGen, "Project"); // Type apgsType = tbAppGen.CreateType(); // var objAppGen = Activator.CreateInstance(apgsType); // foreach (var dt in dic_apgs) // { // apgsType.InvokeMember(dt.Key, BindingFlags.SetProperty, null, objAppGen, new object[] { dt.Value }); // } // return objAppGen; //} private static object CreateSettingsForAppProjectGenerator(ITreeConfigNode node, AppProjectGenerator ttt, Dictionary <string, object> dic_gs, bool isShortVersion) { var nds = (IGetNodeSetting)node; TypeBuilder tbGen = SettingsTypeBuilder.GetTypeBuilder(); // type builder for generators foreach (var tttt in ttt.ListGenerators) { if (tttt.Generator == null) { continue; } if (isShortVersion && (tttt.Guid != ttt.PluginGeneratorGuid)) { continue; } IvPluginGenerator gen = tttt.Generator; var nsettings = nds.GetSettings(ttt.Guid); if (nsettings == null) { continue; } SettingsTypeBuilder.CreateProperty(tbGen, gen.Name, nsettings.GetType(), gen.NameUi, gen.Description); dic_gs[gen.Name] = nsettings; } SettingsTypeBuilder.CreateToString(tbGen, "Generator"); Type settingsType = tbGen.CreateType(); var objGen = Activator.CreateInstance(settingsType); foreach (var dt in dic_gs) { settingsType.InvokeMember(dt.Key, BindingFlags.SetProperty, null, objGen, new object[] { dt.Value }); } return(objGen); }
public object Run(ITreeConfigNode node, bool isShortVersion) { TypeBuilder tbSol = SettingsTypeBuilder.GetTypeBuilder(); // type builder for solutions ConstructorBuilder constructor = tbSol.DefineDefaultConstructor(MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName); Config cfg = (Config)node.GetConfig(); var dic_sols = new Dictionary <string, object>(); foreach (var t in cfg.GroupAppSolutions.ListAppSolutions) { TypeBuilder tbPrj = SettingsTypeBuilder.GetTypeBuilder(); // type builder for projects var dic_prjs = new Dictionary <string, object>(); foreach (var tt in t.ListAppProjects) { Dictionary <string, object> dic_apgs = new Dictionary <string, object>(); var objAppGen = CreateSettingsForProject(node, tt, dic_apgs, isShortVersion); if (dic_apgs.Count > 0) { dic_prjs[tt.Name] = objAppGen; SettingsTypeBuilder.CreateProperty(tbPrj, tt.Name, objAppGen.GetType(), tt.NameUi, tt.Description); } } SettingsTypeBuilder.CreateToString(tbPrj, "Solution"); Type prjsType = tbPrj.CreateType(); SettingsTypeBuilder.CreateProperty(tbSol, t.Name, prjsType, t.NameUi, t.Description); object objPrj = Activator.CreateInstance(prjsType); foreach (var dt in dic_prjs) { prjsType.InvokeMember(dt.Key, BindingFlags.SetProperty, null, objPrj, new object[] { dt.Value }); } //if (dic_prjs.Count > 0) dic_sols[t.Name] = objPrj; } SettingsTypeBuilder.CreateToString(tbSol, "Solutions"); Type solsType = tbSol.CreateType(); object objSol = Activator.CreateInstance(solsType); foreach (var dt in dic_sols) { if (dic_sols.Count == 1) // remove solution level node in settings { return(dt.Value); } solsType.InvokeMember(dt.Key, BindingFlags.SetProperty, null, objSol, new object[] { dt.Value }); } if (dic_sols.Count == 0) { return(null); } return(objSol); }