{"action":"closed","number":128,"pull_request":{"url":"https://api.github.com/repos/graphql-dotnet/server/pulls/128","id":198324816,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk4MzI0ODE2","html_url":"https://github.com/graphql-dotnet/server/pull/128","diff_url":"https://github.com/graphql-dotnet/server/pull/128.diff","patch_url":"https://github.com/graphql-dotnet/server/pull/128.patch","issue_url":"https://api.github.com/repos/graphql-dotnet/server/issues/128","number":128,"state":"closed","locked":false,"title":"DataLoader support and refactor","user":{"login":"johnrutherford","id":1437939,"node_id":"MDQ6VXNlcjE0Mzc5Mzk=","avatar_url":"https://avatars1.githubusercontent.com/u/1437939?v=4","gravatar_id":"","url":"https://api.github.com/users/johnrutherford","html_url":"https://github.com/johnrutherford","followers_url":"https://api.github.com/users/johnrutherford/followers","following_url":"https://api.github.com/users/johnrutherford/following{/other_user}","gists_url":"https://api.github.com/users/johnrutherford/gists{/gist_id}","starred_url":"https://api.github.com/users/johnrutherford/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johnrutherford/subscriptions","organizations_url":"https://api.github.com/users/johnrutherford/orgs","repos_url":"https://api.github.com/users/johnrutherford/repos","events_url":"https://api.github.com/users/johnrutherford/events{/privacy}","received_events_url":"https://api.github.com/users/johnrutherford/received_events","type":"User","site_admin":false},"body":"I'm proposing some extensive changes here so I'm open to discussion.\r\n\r\nThis is what I set out to accomplish:\r\n* Unify configuration and execution logic for all transports. I created a new Core project for common stuff. \r\n* All options configuration is done in ConfigureServices to more closely follow the pattern that MS has established.\r\n* Execution listeners and validation rules are pulled in through DI to make it simple for them to be added.\r\n* `IGraphQLBuilder` is used to register GraphQL-related services in a fluent way. \r\n* Middleware classes get dependencies with the expected lifetime.\r\n* Middleware is added to the pipeline with a `PathString` so it is not created/executed at all if the path does not match. \r\n\r\nThe only potential problem I see with this redesign is that it's not possible to have different listeners/validation rules for different endpoints or different schemas. I'm not sure if that may be a requirement for some users.","created_at":"2018-06-29T13:55:11Z","updated_at":"2018-08-11T06:01:27Z","closed_at":"2018-08-11T06:01:27Z","merged_at":"2018-08-11T06:01:26Z","merge_commit_sha":"c8d2587d0106136fb09879d3b84a7143ddf282f7","assignee":null,"assignees":[],"requested_reviewers":[{"login":"joemcbride","id":255007,"node_id":"MDQ6VXNlcjI1NTAwNw==","avatar_url":"https://avatars1.githubusercontent.com/u/255007?v=4","gravatar_id":"","url":"https://api.github.com/users/joemcbride","html_url":"https://github.com/joemcbride","followers_url":"https://api.github.com/users/joemcbride/followers","following_url":"https://api.github.com/users/joemcbride/following{/other_user}","gists_url":"https://api.github.com/users/joemcbride/gists{/gist_id}","starred_url":"https://api.github.com/users/joemcbride/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/joemcbride/subscriptions","organizations_url":"https://api.github.com/users/joemcbride/orgs","repos_url":"https://api.github.com/users/joemcbride/repos","events_url":"https://api.github.com/users/joemcbride/events{/privacy}","received_events_url":"https://api.github.com/users/joemcbride/received_events","type":"User","site_admin":false},{"login":"pekkah","id":822416,"node_id":"MDQ6VXNlcjgyMjQxNg==","avatar_url":"https://avatars2.githubusercontent.com/u/822416?v=4","gravatar_id":"","url":"https://api.github.com/users/pekkah","html_url":"https://github.com/pekkah","followers_url":"https://api.github.com/users/pekkah/followers","following_url":"https://api.github.com/users/pekkah/following{/other_user}","gists_url":"https://api.github.com/users/pekkah/gists{/gist_id}","starred_url":"https://api.github.com/users/pekkah/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pekkah/subscriptions","organizations_url":"https://api.github.com/users/pekkah/orgs","repos_url":"https://api.github.com/users/pekkah/repos","events_url":"https://api.github.com/users/pekkah/events{/privacy}","received_events_url":"https://api.github.com/users/pekkah/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/graphql-dotnet/server/pulls/128/commits","review_comments_url":"https://api.github.com/repos/graphql-dotnet/server/pulls/128/comments","review_comment_url":"https://api.github.com/repos/graphql-dotnet/server/pulls/comments{/number}","comments_url":"https://api.github.com/repos/graphql-dotnet/server/issues/128/comments","statuses_url":"https://api.github.com/repos/graphql-dotnet/server/statuses/85ecfd5f73e67ac63fef7aeaa368ec6a65a56726","head":{"label":"johnrutherford:dataloader","ref":"dataloader","sha":"85ecfd5f73e67ac63fef7aeaa368ec6a65a56726","user":{"login":"johnrutherford","id":1437939,"node_id":"MDQ6VXNlcjE0Mzc5Mzk=","avatar_url":"https://avatars1.githubusercontent.com/u/1437939?v=4","gravatar_id":"","url":"https://api.github.com/users/johnrutherford","html_url":"https://github.com/johnrutherford","followers_url":"https://api.github.com/users/johnrutherford/followers","following_url":"https://api.github.com/users/johnrutherford/following{/other_user}","gists_url":"https://api.github.com/users/johnrutherford/gists{/gist_id}","starred_url":"https://api.github.com/users/johnrutherford/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johnrutherford/subscriptions","organizations_url":"https://api.github.com/users/johnrutherford/orgs","repos_url":"https://api.github.com/users/johnrutherford/repos","events_url":"https://api.github.com/users/johnrutherford/events{/privacy}","received_events_url":"https://api.github.com/users/johnrutherford/received_events","type":"User","site_admin":false},"repo":{"id":139153937,"node_id":"MDEwOlJlcG9zaXRvcnkxMzkxNTM5Mzc=","name":"server","full_name":"johnrutherford/server","owner":{"login":"johnrutherford","id":1437939,"node_id":"MDQ6VXNlcjE0Mzc5Mzk=","avatar_url":"https://avatars1.githubusercontent.com/u/1437939?v=4","gravatar_id":"","url":"https://api.github.com/users/johnrutherford","html_url":"https://github.com/johnrutherford","followers_url":"https://api.github.com/users/johnrutherford/followers","following_url":"https://api.github.com/users/johnrutherford/following{/other_user}","gists_url":"https://api.github.com/users/johnrutherford/gists{/gist_id}","starred_url":"https://api.github.com/users/johnrutherford/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johnrutherford/subscriptions","organizations_url":"https://api.github.com/users/johnrutherford/orgs","repos_url":"https://api.github.com/users/johnrutherford/repos","events_url":"https://api.github.com/users/johnrutherford/events{/privacy}","received_events_url":"https://api.github.com/users/johnrutherford/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/johnrutherford/server","description":"ASP.NET Core Server + WebSockets Transport","fork":true,"url":"https://api.github.com/repos/johnrutherford/server","forks_url":"https://api.github.com/repos/johnrutherford/server/forks","keys_url":"https://api.github.com/repos/johnrutherford/server/keys{/key_id}","collaborators_url":"https://api.github.com/repos/johnrutherford/server/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/johnrutherford/server/teams","hooks_url":"https://api.github.com/repos/johnrutherford/server/hooks","issue_events_url":"https://api.github.com/repos/johnrutherford/server/issues/events{/number}","events_url":"https://api.github.com/repos/johnrutherford/server/events","assignees_url":"https://api.github.com/repos/johnrutherford/server/assignees{/user}","branches_url":"https://api.github.com/repos/johnrutherford/server/branches{/branch}","tags_url":"https://api.github.com/repos/johnrutherford/server/tags","blobs_url":"https://api.github.com/repos/johnrutherford/server/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/johnrutherford/server/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/johnrutherford/server/git/refs{/sha}","trees_url":"https://api.github.com/repos/johnrutherford/server/git/trees{/sha}","statuses_url":"https://api.github.com/repos/johnrutherford/server/statuses/{sha}","languages_url":"https://api.github.com/repos/johnrutherford/server/languages","stargazers_url":"https://api.github.com/repos/johnrutherford/server/stargazers","contributors_url":"https://api.github.com/repos/johnrutherford/server/contributors","subscribers_url":"https://api.github.com/repos/johnrutherford/server/subscribers","subscription_url":"https://api.github.com/repos/johnrutherford/server/subscription","commits_url":"https://api.github.com/repos/johnrutherford/server/commits{/sha}","git_commits_url":"https://api.github.com/repos/johnrutherford/server/git/commits{/sha}","comments_url":"https://api.github.com/repos/johnrutherford/server/comments{/number}","issue_comment_url":"https://api.github.com/repos/johnrutherford/server/issues/comments{/number}","contents_url":"https://api.github.com/repos/johnrutherford/server/contents/{+path}","compare_url":"https://api.github.com/repos/johnrutherford/server/compare/{base}...{head}","merges_url":"https://api.github.com/repos/johnrutherford/server/merges","archive_url":"https://api.github.com/repos/johnrutherford/server/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/johnrutherford/server/downloads","issues_url":"https://api.github.com/repos/johnrutherford/server/issues{/number}","pulls_url":"https://api.github.com/repos/johnrutherford/server/pulls{/number}","milestones_url":"https://api.github.com/repos/johnrutherford/server/milestones{/number}","notifications_url":"https://api.github.com/repos/johnrutherford/server/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/johnrutherford/server/labels{/name}","releases_url":"https://api.github.com/repos/johnrutherford/server/releases{/id}","deployments_url":"https://api.github.com/repos/johnrutherford/server/deployments","created_at":"2018-06-29T13:39:23Z","updated_at":"2018-06-29T13:39:25Z","pushed_at":"2018-08-10T15:21:14Z","git_url":"git://github.com/johnrutherford/server.git","ssh_url":"git@github.com:johnrutherford/server.git","clone_url":"https://github.com/johnrutherford/server.git","svn_url":"https://github.com/johnrutherford/server","homepage":"","size":681,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"develop"}},"base":{"label":"graphql-dotnet:develop","ref":"develop","sha":"2bc76b47662bdb6a48fb3677c03f789a81df85e3","user":{"login":"graphql-dotnet","id":13958777,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzOTU4Nzc3","avatar_url":"https://avatars0.githubusercontent.com/u/13958777?v=4","gravatar_id":"","url":"https://api.github.com/users/graphql-dotnet","html_url":"https://github.com/graphql-dotnet","followers_url":"https://api.github.com/users/graphql-dotnet/followers","following_url":"https://api.github.com/users/graphql-dotnet/following{/other_user}","gists_url":"https://api.github.com/users/graphql-dotnet/gists{/gist_id}","starred_url":"https://api.github.com/users/graphql-dotnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/graphql-dotnet/subscriptions","organizations_url":"https://api.github.com/users/graphql-dotnet/orgs","repos_url":"https://api.github.com/users/graphql-dotnet/repos","events_url":"https://api.github.com/users/graphql-dotnet/events{/privacy}","received_events_url":"https://api.github.com/users/graphql-dotnet/received_events","type":"Organization","site_admin":false},"repo":{"id":103694242,"node_id":"MDEwOlJlcG9zaXRvcnkxMDM2OTQyNDI=","name":"server","full_name":"graphql-dotnet/server","owner":{"login":"graphql-dotnet","id":13958777,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzOTU4Nzc3","avatar_url":"https://avatars0.githubusercontent.com/u/13958777?v=4","gravatar_id":"","url":"https://api.github.com/users/graphql-dotnet","html_url":"https://github.com/graphql-dotnet","followers_url":"https://api.github.com/users/graphql-dotnet/followers","following_url":"https://api.github.com/users/graphql-dotnet/following{/other_user}","gists_url":"https://api.github.com/users/graphql-dotnet/gists{/gist_id}","starred_url":"https://api.github.com/users/graphql-dotnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/graphql-dotnet/subscriptions","organizations_url":"https://api.github.com/users/graphql-dotnet/orgs","repos_url":"https://api.github.com/users/graphql-dotnet/repos","events_url":"https://api.github.com/users/graphql-dotnet/events{/privacy}","received_events_url":"https://api.github.com/users/graphql-dotnet/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/graphql-dotnet/server","description":"ASP.NET Core Server + WebSockets Transport","fork":false,"url":"https://api.github.com/repos/graphql-dotnet/server","forks_url":"https://api.github.com/repos/graphql-dotnet/server/forks","keys_url":"https://api.github.com/repos/graphql-dotnet/server/keys{/key_id}","collaborators_url":"https://api.github.com/repos/graphql-dotnet/server/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/graphql-dotnet/server/teams","hooks_url":"https://api.github.com/repos/graphql-dotnet/server/hooks","issue_events_url":"https://api.github.com/repos/graphql-dotnet/server/issues/events{/number}","events_url":"https://api.github.com/repos/graphql-dotnet/server/events","assignees_url":"https://api.github.com/repos/graphql-dotnet/server/assignees{/user}","branches_url":"https://api.github.com/repos/graphql-dotnet/server/branches{/branch}","tags_url":"https://api.github.com/repos/graphql-dotnet/server/tags","blobs_url":"https://api.github.com/repos/graphql-dotnet/server/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/graphql-dotnet/server/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/graphql-dotnet/server/git/refs{/sha}","trees_url":"https://api.github.com/repos/graphql-dotnet/server/git/trees{/sha}","statuses_url":"https://api.github.com/repos/graphql-dotnet/server/statuses/{sha}","languages_url":"https://api.github.com/repos/graphql-dotnet/server/languages","stargazers_url":"https://api.github.com/repos/graphql-dotnet/server/stargazers","contributors_url":"https://api.github.com/repos/graphql-dotnet/server/contributors","subscribers_url":"https://api.github.com/repos/graphql-dotnet/server/subscribers","subscription_url":"https://api.github.com/repos/graphql-dotnet/server/subscription","commits_url":"https://api.github.com/repos/graphql-dotnet/server/commits{/sha}","git_commits_url":"https://api.github.com/repos/graphql-dotnet/server/git/commits{/sha}","comments_url":"https://api.github.com/repos/graphql-dotnet/server/comments{/number}","issue_comment_url":"https://api.github.com/repos/graphql-dotnet/server/issues/comments{/number}","contents_url":"https://api.github.com/repos/graphql-dotnet/server/contents/{+path}","compare_url":"https://api.github.com/repos/graphql-dotnet/server/compare/{base}...{head}","merges_url":"https://api.github.com/repos/graphql-dotnet/server/merges","archive_url":"https://api.github.com/repos/graphql-dotnet/server/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/graphql-dotnet/server/downloads","issues_url":"https://api.github.com/repos/graphql-dotnet/server/issues{/number}","pulls_url":"https://api.github.com/repos/graphql-dotnet/server/pulls{/number}","milestones_url":"https://api.github.com/repos/graphql-dotnet/server/milestones{/number}","notifications_url":"https://api.github.com/repos/graphql-dotnet/server/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/graphql-dotnet/server/labels{/name}","releases_url":"https://api.github.com/repos/graphql-dotnet/server/releases{/id}","deployments_url":"https://api.github.com/repos/graphql-dotnet/server/deployments","created_at":"2017-09-15T19:32:39Z","updated_at":"2018-08-08T07:59:14Z","pushed_at":"2018-08-11T06:01:26Z","git_url":"git://github.com/graphql-dotnet/server.git","ssh_url":"git@github.com:graphql-dotnet/server.git","clone_url":"https://github.com/graphql-dotnet/server.git","svn_url":"https://github.com/graphql-dotnet/server","homepage":"","size":666,"stargazers_count":81,"watchers_count":81,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"open_issues_count":23,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":25,"open_issues":23,"watchers":81,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/graphql-dotnet/server/pulls/128"},"html":{"href":"https://github.com/graphql-dotnet/server/pull/128"},"issue":{"href":"https://api.github.com/repos/graphql-dotnet/server/issues/128"},"comments":{"href":"https://api.github.com/repos/graphql-dotnet/server/issues/128/comments"},"review_comments":{"href":"https://api.github.com/repos/graphql-dotnet/server/pulls/128/comments"},"review_comment":{"href":"https://api.github.com/repos/graphql-dotnet/server/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/graphql-dotnet/server/pulls/128/commits"},"statuses":{"href":"https://api.github.com/repos/graphql-dotnet/server/statuses/85ecfd5f73e67ac63fef7aeaa368ec6a65a56726"}},"author_association":"MEMBER","merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"pekkah","id":822416,"node_id":"MDQ6VXNlcjgyMjQxNg==","avatar_url":"https://avatars2.githubusercontent.com/u/822416?v=4","gravatar_id":"","url":"https://api.github.com/users/pekkah","html_url":"https://github.com/pekkah","followers_url":"https://api.github.com/users/pekkah/followers","following_url":"https://api.github.com/users/pekkah/following{/other_user}","gists_url":"https://api.github.com/users/pekkah/gists{/gist_id}","starred_url":"https://api.github.com/users/pekkah/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pekkah/subscriptions","organizations_url":"https://api.github.com/users/pekkah/orgs","repos_url":"https://api.github.com/users/pekkah/repos","events_url":"https://api.github.com/users/pekkah/events{/privacy}","received_events_url":"https://api.github.com/users/pekkah/received_events","type":"User","site_admin":false},"comments":7,"review_comments":0,"maintainer_can_modify":false,"commits":4,"additions":585,"deletions":612,"changed_files":41}}
{"actor":{"display_login":"pekkah"}}