Example #1
0
        public ActionResult ShowOptions(int id)
        {
            var           carModel = CarModelFactory.GetCarModel(Repository.FindCar(id));
            List <string> options  = null;

            if (carModel != null)
            {
                IGenerateOptionsMacro macro = GenerateOptionsMacroFactory.CreateOptionsMacro(carModel);
                options = macro.GenerateOptions(carModel);
            }
            return(Json(options, JsonRequestBehavior.AllowGet));
        }
Example #2
0
        public IGenerateOptionsMacro CreateOptionsMacro(ICarModel car)
        {
            IGenerateOptionsMacro optionsMacro = null;
            var codeFile = @"using System; 
                             using System.Collections.Generic;
                             using ClickpointAuto.Core.Factories;
                             namespace ClickpointAuto.Core.Models
                             {
                                public class GenerateOptionsMacro : IGenerateOptionsMacro
                                {
                                   public List<string> GenerateOptions(ICarModel car)
                                   {
                                      var options = new List<string>();
                                      $
                                      return options;
                                   }   
                                }
                            }";

            codeFile = codeFile.Replace("$", car.OptionsMacroText);
            var syntaxTree  = SyntaxTree.ParseCompilationUnit(codeFile);
            var compilation = Compilation.Create("ClickPointAuto.GenerateOptions",

                                                 options: new CompilationOptions(
                                                     assemblyKind: AssemblyKind.DynamicallyLinkedLibrary))
                              .AddReferences(new MetadataReference[]
            {
                new AssemblyFileReference(typeof(object).Assembly.Location),
                new AssemblyFileReference(typeof(IGenerateOptionsMacro).Assembly.Location),
                new AssemblyFileReference(typeof(CarModel).Assembly.Location)
            }).AddSyntaxTrees(syntaxTree);

            Assembly compiledAssembly;

            using (var stream = new MemoryStream())
            {
                compilation.Emit(stream);
                compiledAssembly = Assembly.Load(stream.GetBuffer());
            }
            optionsMacro = compiledAssembly.
                           CreateInstance("ClickpointAuto.Core.Models.GenerateOptionsMacro", false) as IGenerateOptionsMacro;
            return(optionsMacro);
        }