/// <summary>
        /// Add in Global.Application_Start.(Static Mode)
        /// </summary>
        /// <param name="app"></param>
        /// <param name="configureOptions"></param>
        /// <param name="configureResources"></param>
        /// <returns></returns>
        public static HttpApplication AddJsonQL(this HttpApplication app,
                                                Action <JsonQLOptions> configureOptions,
                                                Action <JsonQLResourceTable> configureResources)
        {
            jsonQLOptions       = new JsonQLOptions();
            jsonQLResourceTable = new JsonQLResourceTable();
            configureOptions?.Invoke(jsonQLOptions);
            configureResources(jsonQLResourceTable);
            jsonQLMiddleware = new JsonQLMiddleware(jsonQLOptions, jsonQLResourceTable);

            return(app);
        }
示例#2
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddLogging();
            services.AddOptions();
            services.AddDbContext <DataContext>(builder =>
            {
                builder.UseSqlite(@"Data Source=.\Database.sqlite");
            });

            //配置JsonQL的资源列表
            services.AddJsonQL(options =>
            {
                options.AuthorizeAsync  = context => Task.FromResult(true);
                options.JsonQLIncluder  = new DynamicJsonQLIncluder();
                options.JsonQLEvaluator = new DynamicJsonQLEvaluator();
                options.JsonQLLinqer    = new DynamicJsonQLLinqer();
            }, serviceProvider =>
            {
                var context       = serviceProvider.CreateScope().ServiceProvider.GetRequiredService <DataContext>();
                var resourceTable = new JsonQLResourceTable();
                resourceTable.AddResource("Orders", new Resource <Order>(context.Orders.AsQueryable()));
                resourceTable.AddResource("OrderStatusChanges", new Resource <OrderStatusChange>(context.OrderStatusChanges.AsQueryable()));
                resourceTable.AddResource("UserAccounts", new Resource <UserAccount>(context.UserAccounts.AsQueryable()));
                resourceTable.AddResource("UserAccountRecords", new Resource <UserAccountRecord>(context.UserAccountRecords.AsQueryable()));
                resourceTable.AddResource("Users", new Resource <User>(context.Users.AsQueryable()));
                resourceTable.AddResource("UserProfiles", new Resource <UserProfile>(context.UserProfiles.AsQueryable()));
                return(resourceTable);
            });
            services.AddJsonQLTester(options =>
            {
                options.ResourceTypes = new Dictionary <string, Type>
                {
                    { "Orders", typeof(Order) },
                    { "OrderStatusChanges", typeof(OrderStatusChange) },
                    { "UserAccounts", typeof(UserAccount) },
                    { "UserAccountRecords", typeof(UserAccountRecord) },
                    { "Users", typeof(User) },
                    { "UserProfiles", typeof(UserProfile) },
                };
            });
        }