public static FusionAuthenticationBuilder AddServer(this FusionAuthenticationBuilder fusionAuth,
                                                            Action <IServiceProvider, SessionMiddleware.Options>?sessionMiddlewareOptionsBuilder = null,
                                                            Action <IServiceProvider, ServerAuthHelper.Options>?authHelperOptionsBuilder         = null,
                                                            Action <IServiceProvider, SignInController.Options>?signInControllerOptionsBuilder   = null)
        {
            var fusion   = fusionAuth.Fusion;
            var services = fusionAuth.Services;

            fusionAuth.AddServerSideAuthService();

            services.TryAddSingleton(c => {
                var options = new SessionMiddleware.Options();
                sessionMiddlewareOptionsBuilder?.Invoke(c, options);
                return(options);
            });
            services.TryAddScoped <SessionMiddleware>();
            services.TryAddSingleton(c => {
                var options = new ServerAuthHelper.Options();
                authHelperOptionsBuilder?.Invoke(c, options);
                return(options);
            });
            services.TryAddSingleton <AuthSchemasCache>();
            services.TryAddScoped <ServerAuthHelper>();

            services.AddRouting();
            fusion.AddWebServer().AddControllers(signInControllerOptionsBuilder);

            return(fusionAuth);
        }
        public static FusionAuthenticationBuilder AddServer(this FusionAuthenticationBuilder fusionAuth,
                                                            Action <IServiceProvider, SessionMiddleware.Options>?sessionMiddlewareOptionsBuilder = null,
                                                            Type?authServiceImplementationType = null)
        {
            fusionAuth.AddServerSideAuthService(authServiceImplementationType);

            var services = fusionAuth.Services;

            services.TryAddSingleton(c => {
                var options = new SessionMiddleware.Options();
                sessionMiddlewareOptionsBuilder?.Invoke(c, options);
                return(options);
            });
            services.TryAddScoped <SessionMiddleware>();
            services.AddRouting();
            services.AddControllers().AddApplicationPart(typeof(AuthController).Assembly);

            return(fusionAuth);
        }