예제 #1
0
 public void Load()
 {
     if (!this.loaded)
     {
         try
         {
             if (this.projectItem.Name.EndsWith(".config"))
             {
                 this.moduleConfig = this.projectItem.Deserialize <XmlModuleConfig>();
             }
         }
         catch (Exception)
         {
             // ignore
         }
         finally
         {
             this.loaded = true;
         }
     }
 }
예제 #2
0
 public ModuleProxy(ProjectItem projectItem, string text, XmlModuleConfig moduleConfig)
 {
     this.projectItem  = projectItem;
     this.text         = text;
     this.moduleConfig = moduleConfig;
 }
        public static string DetermineNewConfig(string configFile, string csFile)
        {
            var services         = csFile.Matches(@".GetObject\<(?<element>[^\>]+)\>").ToList();
            var runtimeServices  = csFile.Matches(@".GetRuntimeObject\<(?<element>[^\>]+)\>").ToList();
            var providedServices = csFile.Matches(@".RegisterInstance\<(?<element>[^\>]+)\>").ToList();
            var stubServices     = csFile.Matches(@"ModuleStub\<(?<element>[^\>]+)\>").ToList();

            if (stubServices.Any())
            {
                services.Add("IModuleLoader");
                services.Add("IActionDispatcherService");
            }

            var moduleConfig = configFile.Deserialize <XmlModuleConfig>();

            var newModuleConfig = new XmlModuleConfig
            {
                ImplementationType = moduleConfig.ImplementationType,
                RequiredServices   =
                    moduleConfig.RequiredServices.OfType <IRequiredService>()
                    .Where(s => services.Union(runtimeServices).Union(stubServices).Any(t => s.ServiceName.EndsWith(t, StringComparison.CurrentCulture)))
                    .OrderBy(s => s.ServiceName)
                    .ToList(),
                DependingServices =
                    moduleConfig.DependingServices.OfType <IDependingService>()
                    .Where(s => services.Union(runtimeServices).Union(stubServices).Any(t => s.ServiceName.EndsWith(t, StringComparison.CurrentCulture)))
                    .OrderBy(s => s.ServiceName)
                    .ToList(),
                ProvidedServices =
                    moduleConfig.ProvidedServices.OfType <IProvidedService>()
                    .Where(s => providedServices.Any(t => s.ServiceName.EndsWith(t, StringComparison.CurrentCulture)))
                    .OrderBy(s => s.ServiceName)
                    .ToList(),
            };

            var newText = newModuleConfig.Serialize();

            var lines     = newText.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Select(l => l.Trim()).Distinct().ToList();
            var newString = new StringBuilder();

            newString.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
            newString.AppendLine($"<moduleConfiguration type=\"{moduleConfig.ImplementationType}\"");
            newString.AppendLine(@"                     xmlns=""http://www.facton.com/infrastructure/modularity"">" + Environment.NewLine);

            foreach (var line in lines.Where(l => l.StartsWith("<requiredService ")))
            {
                newString.AppendLine(line);
            }
            if (lines.Any(l => l.StartsWith("<requiredService ")))
            {
                newString.AppendLine();
            }

            foreach (var line in lines.Where(l => l.StartsWith("<dependingService ")))
            {
                newString.AppendLine(line);
            }
            if (lines.Any(l => l.StartsWith("<dependingService ")))
            {
                newString.AppendLine();
            }

            foreach (var line in lines.Where(l => l.StartsWith("<providedService ")))
            {
                newString.AppendLine(line);
            }
            if (lines.Any(l => l.StartsWith("<providedService ")))
            {
                newString.AppendLine();
            }

            newString.Append("</moduleConfiguration>");

            string file = newString.ToString();

            file = file.Replace(" requirementType=\"normal\"", string.Empty).Replace(" />", "/>").Replace("?>", " ?>").Trim();
            return(file);
        }