示例#1
0
        /// <summary>
        /// Build all proxies
        /// </summary>
        public void Build()
        {
            // Collect all types that are ServiceContract interfaces
            var serviceContractIntfTypes = assemblies.SelectMany(x => x.MainModule.GetTypes()).Where(x => x.IsInterface && x.HasServiceContractAttribute());
            var proxyBuilders = serviceContractIntfTypes.Select(x => new ProxyClassBuilder(x)).ToList();

            // Build structures
            var context = new ProxySerializationContext();
            proxyBuilders.ForEach(x => x.Create(context));
            context.Create(context);

            // Generate code
            var code = new StringBuilder(128 * 1024);
            using (var codeWriter = new StringWriter(code))
            {
                var codeGenerator = new CodeGenerator();
                proxyBuilders.ForEach(x => x.Generate(codeGenerator));
                context.Generate(codeGenerator);
                codeGenerator.Generate(codeWriter);
            }

            // Load existing C# code
            var existingCode = File.Exists(generatedSourcePath) ? File.ReadAllText(generatedSourcePath) : string.Empty;
            var generatedCode = code.ToString();
            if (existingCode != generatedCode)
            {
                // Ensure directory exists
                Directory.CreateDirectory(Path.GetDirectoryName(generatedSourcePath));

                // Write C#
                File.WriteAllText(generatedSourcePath, generatedCode);
            }
        }
示例#2
0
        /// <summary>
        /// Build all proxies
        /// </summary>
        public void Build()
        {
            // Collect all types that are ServiceContract interfaces
            var serviceContractIntfTypes = assemblies.SelectMany(x => x.MainModule.GetTypes()).Where(x => x.IsInterface && x.HasServiceContractAttribute());
            var proxyBuilders            = serviceContractIntfTypes.Select(x => new ProxyClassBuilder(x)).ToList();

            // Build structures
            var context = new ProxySerializationContext();

            proxyBuilders.ForEach(x => x.Create(context));
            context.Create(context);

            // Generate code
            var code = new StringBuilder(128 * 1024);

            using (var codeWriter = new StringWriter(code))
            {
                var codeGenerator = new CodeGenerator();
                proxyBuilders.ForEach(x => x.Generate(codeGenerator));
                context.Generate(codeGenerator);
                codeGenerator.Generate(codeWriter);
            }

            // Load existing C# code
            var existingCode  = File.Exists(generatedSourcePath) ? File.ReadAllText(generatedSourcePath) : string.Empty;
            var generatedCode = code.ToString();

            if (existingCode != generatedCode)
            {
                // Ensure directory exists
                Directory.CreateDirectory(Path.GetDirectoryName(generatedSourcePath));

                // Write C#
                File.WriteAllText(generatedSourcePath, generatedCode);
            }
        }