Example #1
0
        /// <summary>
        /// Creates a new instance of the JsxFileMiddleware.
        /// </summary>
        /// <param name="next">The next middleware in the pipeline.</param>
        /// <param name="options">The configuration options.</param>
        /// <param name="hostingEnv">The hosting environment.</param>
        /// <param name="loggerFactory">An <see cref="ILoggerFactory"/> instance used to create loggers.</param>
        public JsxFileMiddleware(RequestDelegate next, JsxFileOptions options, IHostingEnvironment hostingEnv, ILoggerFactory loggerFactory)
        {
            if (next == null)
            {
                throw new ArgumentNullException("next");
            }

            _next          = next;
            _hostingEnv    = hostingEnv;
            _loggerFactory = loggerFactory;

            // Default values
            _options = options ?? new JsxFileOptions();
        }
        /// <summary>
        /// Initialises ReactJS.NET for this application
        /// </summary>
        /// <param name="app">ASP.NET application builder</param>
        /// <param name="configure">ReactJS.NET configuration</param>
        /// <param name="fileOptions">Options to use for serving JSX files</param>
        /// <returns>The application builder (for chaining)</returns>
        public static IApplicationBuilder UseReact(
            this IApplicationBuilder app,
            Action <IReactSiteConfiguration> configure,
            JsxFileOptions fileOptions = null
            )
        {
            EnsureServicesRegistered(app);

            // Register IApplicationEnvironment in our dependency injection container
            // Ideally this would be in AddReact(IServiceCollection) but we can't
            // access IApplicationEnvironment there.
            React.AssemblyRegistration.Container.Register(app.ApplicationServices.GetRequiredService <IApplicationEnvironment>());
            React.AssemblyRegistration.Container.Register(app.ApplicationServices.GetRequiredService <IHostingEnvironment>());

            Initializer.Initialize(registerOptions => AsPerRequestSingleton(app.ApplicationServices, registerOptions));
            configure(ReactSiteConfiguration.Configuration);

            // Allow serving of .jsx files
            app.UseMiddleware <JsxFileMiddleware>(fileOptions ?? new JsxFileOptions());

            return(app);
        }