Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        //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);
        }
Beispiel #4
0
        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);
        }