/// <summary>
 /// Executes the action provided by the user to configure the resources using <see cref="IResourceGraphBuilder"/>.
 /// Additionally, inspects the EF core database context for models that implement IIdentifiable.
 /// </summary>
 public static void ConfigureResources <TContext>(this JsonApiApplicationBuilder builder, Action <IResourceGraphBuilder> resourceGraphBuilder) where TContext : DbContext
 {
     builder._resourceGraphBuilder.AddDbContext <TContext>();
     builder._usesDbContext = true;
     builder._services.AddScoped <IDbContextResolver, DbContextResolver <TContext> >();
     resourceGraphBuilder?.Invoke(builder._resourceGraphBuilder);
 }
        private static void SetupApplicationBuilder(IServiceCollection services, Action <JsonApiOptions> options,
                                                    Action <IServiceDiscoveryFacade> discovery,
                                                    Action <IResourceGraphBuilder> resources, IMvcCoreBuilder mvcBuilder, Type dbContextType)
        {
            var applicationBuilder = new JsonApiApplicationBuilder(services, mvcBuilder ?? services.AddMvcCore());

            applicationBuilder.ConfigureJsonApiOptions(options);
            applicationBuilder.ConfigureMvc(dbContextType);
            applicationBuilder.AutoDiscover(discovery);
            applicationBuilder.ConfigureResources(resources);
            applicationBuilder.ConfigureServices();
        }
        /// <summary>
        /// Enabling JsonApiDotNetCore using the EF Core DbContext to build the ResourceGraph.
        /// </summary>
        public static IServiceCollection AddJsonApi <TDbContext>(this IServiceCollection services,
                                                                 Action <JsonApiOptions> options            = null,
                                                                 Action <IServiceDiscoveryFacade> discovery = null,
                                                                 Action <IResourceGraphBuilder> resources   = null,
                                                                 IMvcCoreBuilder mvcBuilder = null)
            where TDbContext : DbContext
        {
            var application = new JsonApiApplicationBuilder(services, mvcBuilder ?? services.AddMvcCore());

            if (options != null)
            {
                application.ConfigureJsonApiOptions(options);
            }
            application.ConfigureMvc();
            if (discovery != null)
            {
                application.AutoDiscover(discovery);
            }
            application.ConfigureResources <TDbContext>(resources);
            application.ConfigureServices();
            return(services);
        }