Пример #1
0
        private void Compile(object context)
        {
            var className            = Utility.MakeClassName(ListExtensions.Last(_layoutViewSources).Path);
            var compiler             = options.TemplateCompiler;
            var templateClassBuilder = compiler.CreateTemplateClassBuilder(className);

            var templateParser = new TemplateParser(options, templateClassBuilder, _layoutViewSources);

            var viewSourceReader = templateParser.Parse();

            viewSourceModifiedChecks = viewSourceReader.ViewSourceModifiedChecks;

            if (_templateBaseType.IsGenericTypeDefinition)
            {
                var modelType = GetModelType(templateClassBuilder.Meta);
                templateClassBuilder.BaseType = _templateBaseType.MakeGenericType(modelType);
                options.AddReference(modelType.Assembly);
            }
            else
            {
                templateClassBuilder.BaseType = _templateBaseType;
            }
            templateParser.Options.AddReferences(_templateBaseType);
            if (options.BeforeCompile != null)
            {
                options.BeforeCompile(templateClassBuilder, context);
            }

            _templateFactory = compiler.Compile(viewSourceReader, templateParser.Options, templateClassBuilder);
        }
Пример #2
0
        private TemplateOptions buildTemplateOptions(IComponentContext c)
        {
            var settings = c.Resolve<ToastSettings>();

              // setup template content provider
              var tmplProvider = new FileTemplateContentProvider();

              tmplProvider.PathSources.Clear();
              tmplProvider.PathSources.Add("Content/haml");

              // build the template options
              var opts = new TemplateOptions {
            AutoRecompile = true,
            UseTabs = false,
            IndentSize = 2,
            TemplateContentProvider = tmplProvider,
            OutputDebugFiles = settings.DebugMode,
              };

              // add all assemblies required to be referenced by the template code
              var refs = new[] {
            typeof(ToastTemplate).Assembly,
            typeof(ToastSettings).Assembly,
            typeof(System.Web.HttpContext).Assembly
              };

              opts.References.Clear();
              Array.ForEach(refs, opts.AddReference);

              opts.AddReference("Toast.exe");

              // add Toast-specific usings
              var usings = new[] {
            "Toast",
            "Toast.Web",
            "Toast.Web.Tokens"
              };

              Array.ForEach(usings, opts.AddUsing);

              return opts;
        }