Exemple #1
0
        /// <summary>
        /// Configures built-in .NET Core MVC (things like middleware, routing). Most of this configuration can be adjusted for the developers' need.
        /// Before calling .AddJsonApi(), a developer can register their own implementation of the following services to customize startup:
        /// <see cref="IResourceGraphBuilder"/>, <see cref="IServiceDiscoveryFacade"/>, <see cref="IJsonApiExceptionFilterProvider"/>,
        /// <see cref="IJsonApiTypeMatchFilterProvider"/> and <see cref="IJsonApiRoutingConvention"/>.
        /// </summary>
        public void ConfigureMvc(Type dbContextType)
        {
            RegisterJsonApiStartupServices();

            var intermediateProvider = _services.BuildServiceProvider();

            _resourceGraphBuilder   = intermediateProvider.GetRequiredService <IResourceGraphBuilder>();
            _serviceDiscoveryFacade = intermediateProvider.GetRequiredService <IServiceDiscoveryFacade>();
            _dbContextType          = dbContextType;

            AddResourceTypesFromDbContext(intermediateProvider);

            var exceptionFilterProvider = intermediateProvider.GetRequiredService <IJsonApiExceptionFilterProvider>();
            var typeMatchFilterProvider = intermediateProvider.GetRequiredService <IJsonApiTypeMatchFilterProvider>();
            var routingConvention       = intermediateProvider.GetRequiredService <IJsonApiRoutingConvention>();

            _mvcBuilder.AddMvcOptions(options =>
            {
                options.EnableEndpointRouting = true;
                options.Filters.Add(exceptionFilterProvider.Get());
                options.Filters.Add(typeMatchFilterProvider.Get());
                options.Filters.Add(new ConvertEmptyActionResultFilter());
                options.InputFormatters.Insert(0, new JsonApiInputFormatter());
                options.OutputFormatters.Insert(0, new JsonApiOutputFormatter());
                options.Conventions.Insert(0, routingConvention);
            });

            if (_options.ValidateModelState)
            {
                _mvcBuilder.AddDataAnnotations();
            }

            _services.AddSingleton <IControllerResourceMapping>(routingConvention);
        }
Exemple #2
0
        public static IMvcCoreBuilder AddViews(this IMvcCoreBuilder builder)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.AddDataAnnotations();
            AddViewServices(builder.Services);
            return(builder);
        }
        public static IMvcCoreBuilder AddViews(this IMvcCoreBuilder builder)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.AddDataAnnotations();
            AddViewComponentApplicationPartsProviders(builder.PartManager);
            AddViewServices(builder.Services);
            return(builder);
        }
Exemple #4
0
        public static IMvcCoreBuilder AddViews(
            [NotNull] this IMvcCoreBuilder builder,
            [NotNull] Action <MvcViewOptions> setupAction)
        {
            builder.AddDataAnnotations();
            AddViewServices(builder.Services);

            if (setupAction != null)
            {
                builder.Services.Configure(setupAction);
            }

            return(builder);
        }
Exemple #5
0
        /// <summary>
        /// Configures built-in ASP.NET Core MVC components. Most of this configuration can be adjusted for the developers' need.
        /// </summary>
        public void ConfigureMvc()
        {
            _mvcBuilder.AddMvcOptions(options =>
            {
                options.EnableEndpointRouting = true;
                options.Filters.AddService <IAsyncJsonApiExceptionFilter>();
                options.Filters.AddService <IAsyncQueryStringActionFilter>();
                options.Filters.AddService <IAsyncConvertEmptyActionResultFilter>();
                ConfigureMvcOptions?.Invoke(options);
            });

            if (_options.ValidateModelState)
            {
                _mvcBuilder.AddDataAnnotations();
            }
        }
Exemple #6
0
        /// <summary>
        /// Adds WebApi services to the specified <see cref="IServiceCollection" />.
        /// </summary>
        /// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
        /// <returns>An <see cref="IMvcBuilder"/> that can be used to further configure the WebApi services.</returns>
        public static IMvcBuilder AddWebApi(this IServiceCollection services)
        {
            if (services == null)
            {
                throw new ArgumentNullException("services");
            }
            IMvcCoreBuilder mvcCoreBuilder = services.AddMvcCore();

            mvcCoreBuilder.AddApiExplorer();
            mvcCoreBuilder.AddAuthorization();
            mvcCoreBuilder.AddFormatterMappings();
            mvcCoreBuilder.AddDataAnnotations();
            mvcCoreBuilder.AddJsonFormatters();
            mvcCoreBuilder.AddCors();

            //-MvcServiceCollectionExtensions.AddDefaultFrameworkParts(mvcCoreBuilder.PartManager);
            //-mvcCoreBuilder.AddViews();
            //-mvcCoreBuilder.AddRazorViewEngine();
            //-mvcCoreBuilder.AddRazorPages();
            //-mvcCoreBuilder.AddCacheTagHelper();

            return(new MvcBuilder(mvcCoreBuilder.Services, mvcCoreBuilder.PartManager));
        }
        public static IMvcCoreBuilder AddViews(
            this IMvcCoreBuilder builder,
            Action <MvcViewOptions> setupAction)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (setupAction == null)
            {
                throw new ArgumentNullException(nameof(setupAction));
            }

            builder.AddDataAnnotations();
            AddViewServices(builder.Services);

            if (setupAction != null)
            {
                builder.Services.Configure(setupAction);
            }

            return(builder);
        }
Exemple #8
0
 public static IMvcCoreBuilder AddViews([NotNull] this IMvcCoreBuilder builder)
 {
     builder.AddDataAnnotations();
     AddViewServices(builder.Services);
     return(builder);
 }