private Script(Context.MainDelegate entryPoint)
 {
     _entryPoint          = entryPoint;
     _assemblyName        = new AssemblyName();
     _image               = ImmutableArray <byte> .Empty;
     _previousSubmissions = Array.Empty <Script>();
 }
예제 #2
0
        /// <summary>
        /// Installs Symfony middleware
        /// </summary>
        public static IApplicationBuilder UseSymfony(
            this IApplicationBuilder app,
            string path          = "Symfony",
            SymfonyConfig config = null
            )
        {
            var symfonyRoot = System.IO.Path.GetFullPath(path);
            var fproviderB  = new PhysicalFileProvider(symfonyRoot);

            if (config == null)
            {
                bootstrapConfig = SfConfigurationLoader
                                  .CreateDefault()
                                  .LoadFromSettings(app.ApplicationServices, path);
            }
            else
            {
                bootstrapConfig = config;
            }

            // setup URL rewriting as Symfony projects' servers operate from /public folder
            var options = new RewriteOptions()
                          .AddRewrite(
                @"((.*\/)*([^\/\?&]*\.[^\/\?&]*))",
                bootstrapConfig.PublicDir + "/$1",
                skipRemainingRules: true
                )
                          .AddRewrite(
                @"^(?!" + bootstrapConfig.PublicDir + "/)(.*)$",
                bootstrapConfig.PublicDir,
                skipRemainingRules: true
                );

            app.UseRewriter(options);

            // handling php files:
            app.UsePhp(new PhpRequestOptions(scriptAssemblyName: path)
            {
                RootPath = symfonyRoot,
            });

            // symfony's static files
            app.UseStaticFiles(new StaticFileOptions()
            {
                FileProvider = fproviderB
            });

            // bootstrap.php env loading overriding
            string bootstrapPath = "config\\bootstrap.php";

            Context.MainDelegate md = new Context.MainDelegate(BootstrapMain);
            Context.DeclareScript(bootstrapPath, md);

            return(app);
        }
예제 #3
0
        private Script(AssemblyName assemblyName, MemoryStream peStream, MemoryStream pdbStream, PhpCompilationFactory builder, IEnumerable <Script> previousSubmissions)
        {
            _assemblyName = assemblyName;

            //
            peStream.Position = 0;
            if (pdbStream != null)
            {
                pdbStream.Position = 0;
            }

            var ass = builder.LoadFromStream(assemblyName, peStream, pdbStream);

            if (ass == null)
            {
                throw new ArgumentException();
            }

            peStream.Position = 0;
            _image            = peStream.ToArray().ToImmutableArray();

            foreach (var t in ass.GetTypes())
            {
                var attr = t.GetTypeInfo().GetCustomAttribute <ScriptAttribute>(false);
                if (attr != null)
                {
                    _script     = t;
                    _entryPoint = new Context.ScriptInfo(-1, attr.Path, t.GetTypeInfo()).Evaluate;
                    break;
                }
            }

            if (_entryPoint == null)
            {
                throw new InvalidOperationException();
            }

            // we have to "declare" the script, so its referenced symbols and compiled files are loaded into the context
            // this comes once after loading the assembly
            Context.AddScriptReference(ass);

            // find out highest dependent submissions, if any
            _previousSubmissions = CollectDependencies(ass, builder, previousSubmissions);
        }
예제 #4
0
 private Script(Context.MainDelegate entryPoint)
 {
     _entryPoint   = entryPoint;
     _assemblyName = new AssemblyName();
     _image        = ImmutableArray <byte> .Empty;
 }