private void CreateActionArtifacsts(IObjectSpace objectSpace, RuntimeSetupInfo setupInfo) { if (!objectSpace.Contains <ModuleArtifact>(artifact => artifact.Type == ModuleArtifactType.Action)) { var moduleTypes = GetModuleTypes(setupInfo); var controllers = moduleTypes.SelectMany(type => type.Assembly.GetTypes()) .Where(type => !type.IsAbstract && typeof(Controller).IsAssignableFrom(type)) .Select(type => type.CreateInstance()) .Cast <Controller>(); foreach (var controller in controllers) { var controllerArtifact = objectSpace.GetModuleArtifact(controller.GetType()); foreach (var action in controller.Actions) { var name = action.Id; var actionArtifact = objectSpace.GetObject <ModuleArtifact>(artifact => artifact.Name == name && artifact.Type == ModuleArtifactType.Action); actionArtifact.Name = name; actionArtifact.Type = ModuleArtifactType.Action; actionArtifact.Text = action.ToolTip; actionArtifact.ModuleChilds.AddRange(controllerArtifact.ModuleChilds); actionArtifact.Artifacts.Add(controllerArtifact); controllerArtifact.Artifacts.Add(actionArtifact); } } } }
private static IEnumerable <Type> GetModuleTypes(RuntimeSetupInfo setupInfo) { var fullPath = setupInfo.XpandRootPath + @"\Xpand.DLL"; // var files = Directory.GetFiles(fullPath, "Xpand.ExpressApp*.dll", SearchOption.TopDirectoryOnly).Where(s => s.Contains("ModelDiff")); var files = Directory.GetFiles(fullPath, "Xpand.ExpressApp*.dll", SearchOption.TopDirectoryOnly); return(files.Select(Assembly.LoadFrom).Select(assembly => assembly.GetTypes().FirstOrDefault(type => !type.IsAbstract && typeof(XpandModuleBase).IsAssignableFrom(type))).Where(moduleType => moduleType != null)); }
public bool Run(RuntimeSetupInfo setupInfo) { var typesInfo = new TypesInfo(); typesInfo.AddEntityStore(new NonPersistentEntityStore(typesInfo)); var reflectionDictionary = new ReflectionDictionary(); reflectionDictionary.CollectClassInfos(typeof(ModuleArtifact).Assembly); var xpoTypeInfoSource = new XpoTypeInfoSource(typesInfo, reflectionDictionary); typesInfo.AddEntityStore(xpoTypeInfoSource); typesInfo.LoadTypes(typeof(ModuleArtifact).Assembly); var exportedTypesFromAssembly = ModuleHelper.CollectExportedTypesFromAssembly(typeof(ModuleArtifact).Assembly, ExportedTypeHelpers.IsExportedType); foreach (var type in exportedTypesFromAssembly) { xpoTypeInfoSource.RegisterEntity(type); } var objectSpace = new XPObjectSpace(typesInfo, xpoTypeInfoSource, () => new UnitOfWork(reflectionDictionary) { ConnectionString = setupInfo.ConnectionString }); if (!objectSpace.Contains <ModuleChild>()) { var moduleTypes = GetModuleTypes(setupInfo); var childModules = objectSpace.GetModuleChilds(moduleTypes); foreach (var childModule in childModules) { childModule.Value.CreateArtifacts(childModule.Key); childModule.Value.CreateExtenderInterfaces(childModule.Key); } UpdateMapViewModule(childModules, objectSpace); } CreateObjects(objectSpace, setupInfo); objectSpace.CommitChanges(); return(true); }
private void CreateObjects(IObjectSpace objectSpace, RuntimeSetupInfo setupInfo) { CreateActionArtifacsts(objectSpace, setupInfo); }
private void CreateActionArtifacsts(IObjectSpace objectSpace, RuntimeSetupInfo setupInfo) { if (!objectSpace.Contains<ModuleArtifact>(artifact => artifact.Type == ModuleArtifactType.Action)) { var moduleTypes = GetModuleTypes(setupInfo); var controllers = moduleTypes.SelectMany(type => type.Assembly.GetTypes()) .Where(type => !type.IsAbstract && typeof(Controller).IsAssignableFrom(type)) .Select(type => type.CreateInstance()) .Cast<Controller>(); foreach (var controller in controllers) { var controllerArtifact = objectSpace.GetModuleArtifact(controller.GetType()); foreach (var action in controller.Actions) { var name = action.Id; var actionArtifact = objectSpace.GetObject<ModuleArtifact>(artifact => artifact.Name == name && artifact.Type == ModuleArtifactType.Action); actionArtifact.Name = name; actionArtifact.Type = ModuleArtifactType.Action; actionArtifact.Text = action.ToolTip; actionArtifact.ModuleChilds.AddRange(controllerArtifact.ModuleChilds); actionArtifact.Artifacts.Add(controllerArtifact); controllerArtifact.Artifacts.Add(actionArtifact); } } } }
private void CreateObjects(IObjectSpace objectSpace, RuntimeSetupInfo setupInfo) { CreateActionArtifacsts(objectSpace,setupInfo); }
private static IEnumerable<Type> GetModuleTypes(RuntimeSetupInfo setupInfo){ var fullPath = setupInfo.XpandRootPath + @"\Xpand.DLL"; // var files = Directory.GetFiles(fullPath, "Xpand.ExpressApp*.dll", SearchOption.TopDirectoryOnly).Where(s => s.Contains("ModelDiff")); var files = Directory.GetFiles(fullPath, "Xpand.ExpressApp*.dll", SearchOption.TopDirectoryOnly); return files.Select(Assembly.LoadFrom).Select(assembly =>assembly.GetTypes().FirstOrDefault(type => !type.IsAbstract && typeof (XpandModuleBase).IsAssignableFrom(type))).Where(moduleType => moduleType != null); }
public bool Run(RuntimeSetupInfo setupInfo) { var typesInfo = new TypesInfo(); typesInfo.AddEntityStore(new NonPersistentEntityStore(typesInfo)); var reflectionDictionary = new ReflectionDictionary();reflectionDictionary.CollectClassInfos(typeof(ModuleArtifact).Assembly); var xpoTypeInfoSource = new XpoTypeInfoSource(typesInfo,reflectionDictionary); typesInfo.AddEntityStore(xpoTypeInfoSource); typesInfo.LoadTypes(typeof(ModuleArtifact).Assembly); var exportedTypesFromAssembly = ModuleHelper.CollectExportedTypesFromAssembly(typeof(ModuleArtifact).Assembly,ExportedTypeHelpers.IsExportedType); foreach (var type in exportedTypesFromAssembly){ xpoTypeInfoSource.RegisterEntity(type); } var objectSpace = new XPObjectSpace(typesInfo, xpoTypeInfoSource, () => new UnitOfWork(reflectionDictionary){ ConnectionString = setupInfo.ConnectionString }); if (!objectSpace.Contains<ModuleChild>()){ var moduleTypes = GetModuleTypes(setupInfo); var childModules = objectSpace.GetModuleChilds(moduleTypes); foreach (var childModule in childModules){ childModule.Value.CreateArtifacts(childModule.Key); childModule.Value.CreateExtenderInterfaces(childModule.Key); } UpdateMapViewModule(childModules, objectSpace); } CreateObjects(objectSpace, setupInfo); objectSpace.CommitChanges(); return true; }