GitHub PullRequestReviewCommentEvent at 2014-09-10 20:54:14
Repository: Mvc
Actor: rynowak
Payload: {"action":"created","comment":{"url":"https://api.github.com/repos/aspnet/Mvc/pulls/comments/17388105","id":17388105,"diff_hunk":"@@ -34,5 +35,38 @@ public ActionDescriptor()\n         /// A friendly name for this action.\n         /// </summary>\n         public virtual string DisplayName { get; set; }\n+\n+        /// <summary>\n+        /// Stores arbitrary extension metadata associated with the <see cref=\"ActionDescriptor\"/>.\n+        /// </summary>\n+        public IDictionary<Type, object> ExtensionData { get; private set; }\n+\n+        /// <summary>\n+        /// Gets the value of an extension data from the <see cref=\"ExtensionData\"/> collection.\n+        /// </summary>\n+        /// <typeparam name=\"T\">The type of the extension data.</typeparam>\n+        /// <returns>The extension data or the default value of <typeparamref name=\"T\"/>.</returns>\n+        public T GetExtension<T>()\n+        {\n+            object value;\n+            if (ExtensionData.TryGetValue(typeof(T), out value))\n+            {\n+                return (T)value;\n+            }\n+            else\n+            {\n+                return default(T);\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Sets the value of an extension data in the <see cref=\"ExtensionData\"/> collection.\n+        /// </summary>\n+        /// <typeparam name=\"T\">The type of the extension data.</typeparam>\n+        /// <param name=\"value\">The value of an extension data.</param>\n+        public void SetExtension<T>([NotNull] T value)\n+        {\n+            ExtensionData[typeof(T)] = value;\n+        }","path":"src/Microsoft.AspNet.Mvc.Core/ActionDescriptor.cs","position":44,"original_position":44,"commit_id":"d79d5998d1da36db4ae4d36f0f0be76a67144e67","original_commit_id":"d79d5998d1da36db4ae4d36f0f0be76a67144e67","user":{"login":"rynowak","id":1430011,"avatar_url":"https://avatars.githubusercontent.com/u/1430011?v=2","gravatar_id":"8a6cc82fe52d3e7f9e820ce0cef2b7ee","url":"https://api.github.com/users/rynowak","html_url":"https://github.com/rynowak","followers_url":"https://api.github.com/users/rynowak/followers","following_url":"https://api.github.com/users/rynowak/following{/other_user}","gists_url":"https://api.github.com/users/rynowak/gists{/gist_id}","starred_url":"https://api.github.com/users/rynowak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rynowak/subscriptions","organizations_url":"https://api.github.com/users/rynowak/orgs","repos_url":"https://api.github.com/users/rynowak/repos","events_url":"https://api.github.com/users/rynowak/events{/privacy}","received_events_url":"https://api.github.com/users/rynowak/received_events","type":"User","site_admin":false},"body":"This is the pattern I'm proposing for extending `ActionDescriptor` and `ApiDescription` with arbitrary extra data. Looking for design feedback on this.","created_at":"2014-09-10T20:54:14Z","updated_at":"2014-09-10T20:54:14Z","html_url":"https://github.com/aspnet/Mvc/pull/1119#discussion_r17388105","pull_request_url":"https://api.github.com/repos/aspnet/Mvc/pulls/1119","_links":{"self":{"href":"https://api.github.com/repos/aspnet/Mvc/pulls/comments/17388105"},"html":{"href":"https://github.com/aspnet/Mvc/pull/1119#discussion_r17388105"},"pull_request":{"href":"https://api.github.com/repos/aspnet/Mvc/pulls/1119"}}},"pull_request":{"url":"https://api.github.com/repos/aspnet/Mvc/pulls/1119","id":21049381,"html_url":"https://github.com/aspnet/Mvc/pull/1119","diff_url":"https://github.com/aspnet/Mvc/pull/1119.diff","patch_url":"https://github.com/aspnet/Mvc/pull/1119.patch","issue_url":"https://api.github.com/repos/aspnet/Mvc/issues/1119","number":1119,"state":"open","locked":false,"title":"Adding Api Explorer","user":{"login":"rynowak","id":1430011,"avatar_url":"https://avatars.githubusercontent.com/u/1430011?v=2","gravatar_id":"8a6cc82fe52d3e7f9e820ce0cef2b7ee","url":"https://api.github.com/users/rynowak","html_url":"https://github.com/rynowak","followers_url":"https://api.github.com/users/rynowak/followers","following_url":"https://api.github.com/users/rynowak/following{/other_user}","gists_url":"https://api.github.com/users/rynowak/gists{/gist_id}","starred_url":"https://api.github.com/users/rynowak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rynowak/subscriptions","organizations_url":"https://api.github.com/users/rynowak/orgs","repos_url":"https://api.github.com/users/rynowak/repos","events_url":"https://api.github.com/users/rynowak/events{/privacy}","received_events_url":"https://api.github.com/users/rynowak/received_events","type":"User","site_admin":false},"body":"Adds ApiExplorer to MVC and some new plumbing through action descriptors to share arbitrary data.\r\n\r\nApiExplorer produces a set of `ApiDescription` objects for each action that is *visible*. \r\n- `ApiDescription` maps to a specific HTTP verb - or all verbs if there is no restriction\r\n- There can be multiple per action based on routes and verbs\r\n- Includes data about formatters, content-types, parameters\r\n\r\nThere's a number of things are **are not** included in this work item\r\n- Providing access to user-written doc comments\r\n- Full implementation of the URL part\r\n- Full implementation of the parameter part\r\n\r\nApiExplorer shares a number of implementation characteristics with the `ActionDescriptor` provider pipeline\r\n- The collection of `ApiDescription` is cached, lazy and versioning\r\n- `ApiDescription` objects are produced by an `INestedProvider<>` pipeline\r\n- We only produce them for our *default* `ReflectedActionDescriptor` objects.\r\n\r\nThe other new thing that's here is an arbitrary metadata mechanism for data that's associated with an AD, but not used for any execution details. I did the same on the `ApiDescription` which has serious need for a *add your framework-specific data here* concept.","created_at":"2014-09-10T20:52:47Z","updated_at":"2014-09-10T20:54:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3f7d502345f01a1331180802498c3f3b63f929e9","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/aspnet/Mvc/pulls/1119/commits","review_comments_url":"https://api.github.com/repos/aspnet/Mvc/pulls/1119/comments","review_comment_url":"https://api.github.com/repos/aspnet/Mvc/pulls/comments/{number}","comments_url":"https://api.github.com/repos/aspnet/Mvc/issues/1119/comments","statuses_url":"https://api.github.com/repos/aspnet/Mvc/statuses/d79d5998d1da36db4ae4d36f0f0be76a67144e67","head":{"label":"aspnet:api-explorer","ref":"api-explorer","sha":"d79d5998d1da36db4ae4d36f0f0be76a67144e67","user":{"login":"aspnet","id":6476660,"avatar_url":"https://avatars.githubusercontent.com/u/6476660?v=2","gravatar_id":null,"url":"https://api.github.com/users/aspnet","html_url":"https://github.com/aspnet","followers_url":"https://api.github.com/users/aspnet/followers","following_url":"https://api.github.com/users/aspnet/following{/other_user}","gists_url":"https://api.github.com/users/aspnet/gists{/gist_id}","starred_url":"https://api.github.com/users/aspnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aspnet/subscriptions","organizations_url":"https://api.github.com/users/aspnet/orgs","repos_url":"https://api.github.com/users/aspnet/repos","events_url":"https://api.github.com/users/aspnet/events{/privacy}","received_events_url":"https://api.github.com/users/aspnet/received_events","type":"Organization","site_admin":false},"repo":{"id":15126429,"name":"Mvc","full_name":"aspnet/Mvc","owner":{"login":"aspnet","id":6476660,"avatar_url":"https://avatars.githubusercontent.com/u/6476660?v=2","gravatar_id":null,"url":"https://api.github.com/users/aspnet","html_url":"https://github.com/aspnet","followers_url":"https://api.github.com/users/aspnet/followers","following_url":"https://api.github.com/users/aspnet/following{/other_user}","gists_url":"https://api.github.com/users/aspnet/gists{/gist_id}","starred_url":"https://api.github.com/users/aspnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aspnet/subscriptions","organizations_url":"https://api.github.com/users/aspnet/orgs","repos_url":"https://api.github.com/users/aspnet/repos","events_url":"https://api.github.com/users/aspnet/events{/privacy}","received_events_url":"https://api.github.com/users/aspnet/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/aspnet/Mvc","description":"","fork":false,"url":"https://api.github.com/repos/aspnet/Mvc","forks_url":"https://api.github.com/repos/aspnet/Mvc/forks","keys_url":"https://api.github.com/repos/aspnet/Mvc/keys{/key_id}","collaborators_url":"https://api.github.com/repos/aspnet/Mvc/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/aspnet/Mvc/teams","hooks_url":"https://api.github.com/repos/aspnet/Mvc/hooks","issue_events_url":"https://api.github.com/repos/aspnet/Mvc/issues/events{/number}","events_url":"https://api.github.com/repos/aspnet/Mvc/events","assignees_url":"https://api.github.com/repos/aspnet/Mvc/assignees{/user}","branches_url":"https://api.github.com/repos/aspnet/Mvc/branches{/branch}","tags_url":"https://api.github.com/repos/aspnet/Mvc/tags","blobs_url":"https://api.github.com/repos/aspnet/Mvc/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/aspnet/Mvc/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/aspnet/Mvc/git/refs{/sha}","trees_url":"https://api.github.com/repos/aspnet/Mvc/git/trees{/sha}","statuses_url":"https://api.github.com/repos/aspnet/Mvc/statuses/{sha}","languages_url":"https://api.github.com/repos/aspnet/Mvc/languages","stargazers_url":"https://api.github.com/repos/aspnet/Mvc/stargazers","contributors_url":"https://api.github.com/repos/aspnet/Mvc/contributors","subscribers_url":"https://api.github.com/repos/aspnet/Mvc/subscribers","subscription_url":"https://api.github.com/repos/aspnet/Mvc/subscription","commits_url":"https://api.github.com/repos/aspnet/Mvc/commits{/sha}","git_commits_url":"https://api.github.com/repos/aspnet/Mvc/git/commits{/sha}","comments_url":"https://api.github.com/repos/aspnet/Mvc/comments{/number}","issue_comment_url":"https://api.github.com/repos/aspnet/Mvc/issues/comments/{number}","contents_url":"https://api.github.com/repos/aspnet/Mvc/contents/{+path}","compare_url":"https://api.github.com/repos/aspnet/Mvc/compare/{base}...{head}","merges_url":"https://api.github.com/repos/aspnet/Mvc/merges","archive_url":"https://api.github.com/repos/aspnet/Mvc/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/aspnet/Mvc/downloads","issues_url":"https://api.github.com/repos/aspnet/Mvc/issues{/number}","pulls_url":"https://api.github.com/repos/aspnet/Mvc/pulls{/number}","milestones_url":"https://api.github.com/repos/aspnet/Mvc/milestones{/number}","notifications_url":"https://api.github.com/repos/aspnet/Mvc/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/aspnet/Mvc/labels{/name}","releases_url":"https://api.github.com/repos/aspnet/Mvc/releases{/id}","created_at":"2013-12-12T03:54:00Z","updated_at":"2014-09-10T20:04:54Z","pushed_at":"2014-09-10T20:44:46Z","git_url":"git://github.com/aspnet/Mvc.git","ssh_url":"git@github.com:aspnet/Mvc.git","clone_url":"https://github.com/aspnet/Mvc.git","svn_url":"https://github.com/aspnet/Mvc","homepage":null,"size":35872,"stargazers_count":689,"watchers_count":689,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"forks_count":178,"mirror_url":null,"open_issues_count":336,"forks":178,"open_issues":336,"watchers":689,"default_branch":"dev"}},"base":{"label":"aspnet:dev","ref":"dev","sha":"cde1a95d49ffcd9d3b777c48517d17288997ed71","user":{"login":"aspnet","id":6476660,"avatar_url":"https://avatars.githubusercontent.com/u/6476660?v=2","gravatar_id":null,"url":"https://api.github.com/users/aspnet","html_url":"https://github.com/aspnet","followers_url":"https://api.github.com/users/aspnet/followers","following_url":"https://api.github.com/users/aspnet/following{/other_user}","gists_url":"https://api.github.com/users/aspnet/gists{/gist_id}","starred_url":"https://api.github.com/users/aspnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aspnet/subscriptions","organizations_url":"https://api.github.com/users/aspnet/orgs","repos_url":"https://api.github.com/users/aspnet/repos","events_url":"https://api.github.com/users/aspnet/events{/privacy}","received_events_url":"https://api.github.com/users/aspnet/received_events","type":"Organization","site_admin":false},"repo":{"id":15126429,"name":"Mvc","full_name":"aspnet/Mvc","owner":{"login":"aspnet","id":6476660,"avatar_url":"https://avatars.githubusercontent.com/u/6476660?v=2","gravatar_id":null,"url":"https://api.github.com/users/aspnet","html_url":"https://github.com/aspnet","followers_url":"https://api.github.com/users/aspnet/followers","following_url":"https://api.github.com/users/aspnet/following{/other_user}","gists_url":"https://api.github.com/users/aspnet/gists{/gist_id}","starred_url":"https://api.github.com/users/aspnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aspnet/subscriptions","organizations_url":"https://api.github.com/users/aspnet/orgs","repos_url":"https://api.github.com/users/aspnet/repos","events_url":"https://api.github.com/users/aspnet/events{/privacy}","received_events_url":"https://api.github.com/users/aspnet/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/aspnet/Mvc","description":"","fork":false,"url":"https://api.github.com/repos/aspnet/Mvc","forks_url":"https://api.github.com/repos/aspnet/Mvc/forks","keys_url":"https://api.github.com/repos/aspnet/Mvc/keys{/key_id}","collaborators_url":"https://api.github.com/repos/aspnet/Mvc/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/aspnet/Mvc/teams","hooks_url":"https://api.github.com/repos/aspnet/Mvc/hooks","issue_events_url":"https://api.github.com/repos/aspnet/Mvc/issues/events{/number}","events_url":"https://api.github.com/repos/aspnet/Mvc/events","assignees_url":"https://api.github.com/repos/aspnet/Mvc/assignees{/user}","branches_url":"https://api.github.com/repos/aspnet/Mvc/branches{/branch}","tags_url":"https://api.github.com/repos/aspnet/Mvc/tags","blobs_url":"https://api.github.com/repos/aspnet/Mvc/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/aspnet/Mvc/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/aspnet/Mvc/git/refs{/sha}","trees_url":"https://api.github.com/repos/aspnet/Mvc/git/trees{/sha}","statuses_url":"https://api.github.com/repos/aspnet/Mvc/statuses/{sha}","languages_url":"https://api.github.com/repos/aspnet/Mvc/languages","stargazers_url":"https://api.github.com/repos/aspnet/Mvc/stargazers","contributors_url":"https://api.github.com/repos/aspnet/Mvc/contributors","subscribers_url":"https://api.github.com/repos/aspnet/Mvc/subscribers","subscription_url":"https://api.github.com/repos/aspnet/Mvc/subscription","commits_url":"https://api.github.com/repos/aspnet/Mvc/commits{/sha}","git_commits_url":"https://api.github.com/repos/aspnet/Mvc/git/commits{/sha}","comments_url":"https://api.github.com/repos/aspnet/Mvc/comments{/number}","issue_comment_url":"https://api.github.com/repos/aspnet/Mvc/issues/comments/{number}","contents_url":"https://api.github.com/repos/aspnet/Mvc/contents/{+path}","compare_url":"https://api.github.com/repos/aspnet/Mvc/compare/{base}...{head}","merges_url":"https://api.github.com/repos/aspnet/Mvc/merges","archive_url":"https://api.github.com/repos/aspnet/Mvc/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/aspnet/Mvc/downloads","issues_url":"https://api.github.com/repos/aspnet/Mvc/issues{/number}","pulls_url":"https://api.github.com/repos/aspnet/Mvc/pulls{/number}","milestones_url":"https://api.github.com/repos/aspnet/Mvc/milestones{/number}","notifications_url":"https://api.github.com/repos/aspnet/Mvc/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/aspnet/Mvc/labels{/name}","releases_url":"https://api.github.com/repos/aspnet/Mvc/releases{/id}","created_at":"2013-12-12T03:54:00Z","updated_at":"2014-09-10T20:04:54Z","pushed_at":"2014-09-10T20:44:46Z","git_url":"git://github.com/aspnet/Mvc.git","ssh_url":"git@github.com:aspnet/Mvc.git","clone_url":"https://github.com/aspnet/Mvc.git","svn_url":"https://github.com/aspnet/Mvc","homepage":null,"size":35872,"stargazers_count":689,"watchers_count":689,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"forks_count":178,"mirror_url":null,"open_issues_count":336,"forks":178,"open_issues":336,"watchers":689,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/aspnet/Mvc/pulls/1119"},"html":{"href":"https://github.com/aspnet/Mvc/pull/1119"},"issue":{"href":"https://api.github.com/repos/aspnet/Mvc/issues/1119"},"comments":{"href":"https://api.github.com/repos/aspnet/Mvc/issues/1119/comments"},"review_comments":{"href":"https://api.github.com/repos/aspnet/Mvc/pulls/1119/comments"},"review_comment":{"href":"https://api.github.com/repos/aspnet/Mvc/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/aspnet/Mvc/pulls/1119/commits"},"statuses":{"href":"https://api.github.com/repos/aspnet/Mvc/statuses/d79d5998d1da36db4ae4d36f0f0be76a67144e67"}}}}