{"action":"created","comment":{"url":"https://api.github.com/repos/Particular/NServiceBus/pulls/comments/35945803","id":35945803,"diff_hunk":"@@ -110,5 +119,273 @@ public bool TryGetFinder(string messageType, out SagaFinderDefinition finderDefi\n         {\n             return sagaFinders.TryGetValue(messageType, out finderDefinition);\n         }\n+\n+        /// <summary>\n+        /// Creates a <see cref=\"SagaMetadata\" /> from a specific Saga type.\n+        /// </summary>\n+        /// <param name=\"sagaType\">A type representing a Saga. Must be a non-generic type inheriting from <see cref=\"NServiceBus.Saga.Saga\" />.</param>\n+        /// <returns>An instance of <see cref=\"SagaMetadata\" /> describing the Saga.</returns>\n+        public static SagaMetadata Create(Type sagaType)\n+        {\n+            return Create(sagaType, new List<Type>(), new Conventions());\n+        }\n+\n+        /// <summary>\n+        /// Creates a <see cref=\"SagaMetadata\" /> from a specific Saga type.\n+        /// </summary>\n+        /// <param name=\"sagaType\">A type representing a Saga. Must be a non-generic type inheriting from <see cref=\"NServiceBus.Saga.Saga\" />.</param>\n+        /// <param name=\"availableTypes\">Additional available types, used to locate saga finders and other related classes.</param>\n+        /// <param name=\"conventions\">Custom conventions to use while scanning types.</param>\n+        /// <returns>An instance of <see cref=\"SagaMetadata\" /> describing the Saga.</returns>\n+        public static SagaMetadata Create(Type sagaType, IEnumerable<Type> availableTypes, Conventions conventions)\n+        {\n+            if (!IsSagaType(sagaType))\n+            {\n+                throw new Exception(sagaType.FullName + \" is not a saga\");\n+            }\n+\n+            var genericArguments = GetBaseSagaType(sagaType).GetGenericArguments();\n+            if (genericArguments.Length != 1)\n+            {\n+                throw new Exception(string.Format(\"'{0}' saga type does not implement Saga<T>\", sagaType));\n+            }\n+\n+            var saga = (Saga)FormatterServices.GetUninitializedObject(sagaType);\n+            var mapper = new SagaMapper();\n+            saga.ConfigureHowToFindSaga(mapper);\n+\n+            var sagaEntityType = genericArguments.Single();\n+\n+            ApplyScannedFinders(mapper, sagaEntityType, availableTypes, conventions);\n+\n+            var correlationProperties = new List<CorrelationProperty>();\n+            var finders = new List<SagaFinderDefinition>();\n+\n+            foreach (var mapping in mapper.Mappings)\n+            {\n+                if (!mapping.HasCustomFinderMap)\n+                {\n+                    correlationProperties.Add(new CorrelationProperty(mapping.SagaPropName));\n+                }\n+\n+                SetFinderForMessage(mapping, sagaEntityType, finders);\n+            }\n+\n+            var associatedMessages = GetAssociatedMessages(sagaType)\n+                .ToList();\n+\n+            return new SagaMetadata(sagaType.FullName, sagaType, sagaEntityType.FullName, sagaEntityType, correlationProperties, associatedMessages, finders);\n+        }\n+\n+        static void ApplyScannedFinders(SagaMapper mapper, Type sagaEntityType, IEnumerable<Type> availableTypes, Conventions conventions)\n+        {\n+            var actualFinders = availableTypes.Where(t => typeof(IFinder).IsAssignableFrom(t) && t.IsClass)\n+                .ToList();\n+\n+            foreach (var finderType in actualFinders)\n+            {\n+                foreach (var interfaceType in finderType.GetInterfaces())\n+                {\n+                    var args = interfaceType.GetGenericArguments();\n+                    //since we dont want to process the IFinder type\n+                    if (args.Length != 2)\n+                    {\n+                        continue;\n+                    }\n+\n+                    var entityType = args[0];\n+                    if (entityType != sagaEntityType)\n+                    {\n+                        continue;\n+                    }\n+\n+                    var messageType = args[1];\n+                    if (!conventions.IsMessageType(messageType))\n+                    {\n+                        var error = string.Format(\"A custom IFindSagas must target a valid message type as defined by the message conventions. Please change '{0}' to a valid message type or add it to the message conventions. Finder name '{1}'.\", messageType.FullName, finderType.FullName);\n+                        throw new Exception(error);\n+                    }\n+\n+                    var existingMapping = mapper.Mappings.SingleOrDefault(m => m.MessageType == messageType);\n+                    if (existingMapping != null)\n+                    {\n+                        var bothMappingAndFinder = string.Format(\"A custom IFindSagas and an existing mapping where found for message '{0}'. Please either remove the message mapping for remove the finder. Finder name '{1}'.\", messageType.FullName, finderType.FullName);\n+                        throw new Exception(bothMappingAndFinder);\n+                    }\n+                    mapper.ConfigureCustomFinder(finderType, messageType);\n+                }\n+            }\n+        }\n+\n+        static void SetFinderForMessage(SagaToMessageMap mapping, Type sagaEntityType, List<SagaFinderDefinition> finders)\n+        {\n+            if (mapping.HasCustomFinderMap)\n+            {\n+                finders.Add(new SagaFinderDefinition(typeof(CustomFinderAdapter<,>).MakeGenericType(sagaEntityType, mapping.MessageType), mapping.MessageType.FullName, new Dictionary<string, object>\n+                {\n+                    {\"custom-finder-clr-type\", mapping.CustomFinderType}\n+                }));\n+\n+            }\n+            else\n+            {\n+                finders.Add(new SagaFinderDefinition(typeof(PropertySagaFinder<>).MakeGenericType(sagaEntityType), mapping.MessageType.FullName, new Dictionary<string, object>\n+                {\n+                    {\"property-accessor\", mapping.MessageProp},\n+                    {\"saga-property-name\", mapping.SagaPropName}\n+                }));\n+            }\n+        }\n+\n+        static IEnumerable<SagaMessage> GetAssociatedMessages(Type sagaType)\n+        {\n+            var result = GetMessagesCorrespondingToFilterOnSaga(sagaType, typeof(IAmStartedByMessages<>))\n+                .Select(t => new SagaMessage(t.FullName, true)).ToList();\n+\n+            foreach (var messageType in GetMessagesCorrespondingToFilterOnSaga(sagaType, typeof(IHandleMessages<>)))\n+            {\n+                if (result.Any(m => m.MessageType == messageType.FullName))\n+                {\n+                    continue;\n+                }\n+                result.Add(new SagaMessage(messageType.FullName, false));\n+            }\n+\n+            foreach (var messageType in GetMessagesCorrespondingToFilterOnSaga(sagaType, typeof(IHandleTimeouts<>)))\n+            {\n+                if (result.Any(m => m.MessageType == messageType.FullName))\n+                {\n+                    continue;\n+                }\n+                result.Add(new SagaMessage(messageType.FullName, false));\n+            }\n+\n+            return result;\n+        }\n+\n+        static IEnumerable<Type> GetMessagesCorrespondingToFilterOnSaga(Type sagaType, Type filter)\n+        {\n+            foreach (var interfaceType in sagaType.GetInterfaces())\n+            {\n+                foreach (var argument in interfaceType.GetGenericArguments())\n+                {\n+                    var genericType = filter.MakeGenericType(argument);\n+                    var isOfFilterType = genericType == interfaceType;\n+                    if (!isOfFilterType)\n+                    {\n+                        continue;\n+                    }\n+                    yield return argument;\n+                }\n+            }\n+        }\n+\n+        class SagaMapper : IConfigureHowToFindSagaWithMessage\n+        {\n+            public List<SagaToMessageMap> Mappings = new List<SagaToMessageMap>();\n+\n+            void IConfigureHowToFindSagaWithMessage.ConfigureMapping<TSagaEntity, TMessage>(Expression<Func<TSagaEntity, object>> sagaEntityProperty, Expression<Func<TMessage, object>> messageExpression)\n+            {\n+                var sagaProp = Reflect<TSagaEntity>.GetProperty(sagaEntityProperty, true);\n+\n+                ValidateMapping<TSagaEntity, TMessage>(messageExpression, sagaProp);\n+\n+                ThrowIfNotPropertyLambdaExpression(sagaEntityProperty, sagaProp);\n+                var compiledMessageExpression = messageExpression.Compile();\n+                var messageFunc = new Func<object, object>(o => compiledMessageExpression((TMessage)o));\n+\n+                Mappings.Add(new SagaToMessageMap\n+                {\n+                    MessageProp = messageFunc,\n+                    SagaPropName = sagaProp.Name,\n+                    MessageType = typeof(TMessage)\n+                });\n+            }\n+\n+            static void ValidateMapping<TSagaEntity, TMessage>(Expression<Func<TMessage, object>> messageExpression, PropertyInfo sagaProp)","path":"src/NServiceBus.Core/Sagas/SagaMetadata.cs","position":211,"original_position":211,"commit_id":"5fcf75075d34524a7703f6f43561c6a28b656854","original_commit_id":"5fcf75075d34524a7703f6f43561c6a28b656854","user":{"login":"SzymonPobiega","id":163318,"avatar_url":"https://avatars.githubusercontent.com/u/163318?v=3","gravatar_id":"","url":"https://api.github.com/users/SzymonPobiega","html_url":"https://github.com/SzymonPobiega","followers_url":"https://api.github.com/users/SzymonPobiega/followers","following_url":"https://api.github.com/users/SzymonPobiega/following{/other_user}","gists_url":"https://api.github.com/users/SzymonPobiega/gists{/gist_id}","starred_url":"https://api.github.com/users/SzymonPobiega/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SzymonPobiega/subscriptions","organizations_url":"https://api.github.com/users/SzymonPobiega/orgs","repos_url":"https://api.github.com/users/SzymonPobiega/repos","events_url":"https://api.github.com/users/SzymonPobiega/events{/privacy}","received_events_url":"https://api.github.com/users/SzymonPobiega/received_events","type":"User","site_admin":false},"body":"R# claims `TSagaEntity` is not used.","created_at":"2015-07-31T04:25:02Z","updated_at":"2015-07-31T04:25:02Z","html_url":"https://github.com/Particular/NServiceBus/pull/2788#discussion_r35945803","pull_request_url":"https://api.github.com/repos/Particular/NServiceBus/pulls/2788","_links":{"self":{"href":"https://api.github.com/repos/Particular/NServiceBus/pulls/comments/35945803"},"html":{"href":"https://github.com/Particular/NServiceBus/pull/2788#discussion_r35945803"},"pull_request":{"href":"https://api.github.com/repos/Particular/NServiceBus/pulls/2788"}}},"pull_request":{"url":"https://api.github.com/repos/Particular/NServiceBus/pulls/2788","id":41147617,"html_url":"https://github.com/Particular/NServiceBus/pull/2788","diff_url":"https://github.com/Particular/NServiceBus/pull/2788.diff","patch_url":"https://github.com/Particular/NServiceBus/pull/2788.patch","issue_url":"https://api.github.com/repos/Particular/NServiceBus/issues/2788","number":2788,"state":"open","locked":false,"title":"Expose SagaMetadata as built by TypeBasedSagaMetaModel","user":{"login":"DavidBoike","id":427110,"avatar_url":"https://avatars.githubusercontent.com/u/427110?v=3","gravatar_id":"","url":"https://api.github.com/users/DavidBoike","html_url":"https://github.com/DavidBoike","followers_url":"https://api.github.com/users/DavidBoike/followers","following_url":"https://api.github.com/users/DavidBoike/following{/other_user}","gists_url":"https://api.github.com/users/DavidBoike/gists{/gist_id}","starred_url":"https://api.github.com/users/DavidBoike/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DavidBoike/subscriptions","organizations_url":"https://api.github.com/users/DavidBoike/orgs","repos_url":"https://api.github.com/users/DavidBoike/repos","events_url":"https://api.github.com/users/DavidBoike/events{/privacy}","received_events_url":"https://api.github.com/users/DavidBoike/received_events","type":"User","site_admin":false},"body":"Blocker for [NHibernate Saga Metamodel refactoring](https://github.com/Particular/FeatureDevelopment/issues/324)\r\n\r\nWhether or not something is a unit test or an acceptance tests seems to me irrelevant. We have tests here and there that need, as their basis, the reference SagaMetadata from an arbitrary collection of types, to use as reference information, the same way NServiceBus proper would.\r\n\r\nTypeBasedSagaMetaModel is and should remain internal in its implementation, but its result should be publicly available knowledge. Otherwise SagaMetadata is a voodoo type.\r\n","created_at":"2015-07-29T17:06:47Z","updated_at":"2015-07-31T04:25:02Z","closed_at":null,"merged_at":null,"merge_commit_sha":"09fd26b92608ffc2966e0e63ca90723f6efd3b17","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/Particular/NServiceBus/pulls/2788/commits","review_comments_url":"https://api.github.com/repos/Particular/NServiceBus/pulls/2788/comments","review_comment_url":"https://api.github.com/repos/Particular/NServiceBus/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Particular/NServiceBus/issues/2788/comments","statuses_url":"https://api.github.com/repos/Particular/NServiceBus/statuses/5fcf75075d34524a7703f6f43561c6a28b656854","head":{"label":"Particular:expose-sagametadata-result","ref":"expose-sagametadata-result","sha":"5fcf75075d34524a7703f6f43561c6a28b656854","user":{"login":"Particular","id":5038441,"avatar_url":"https://avatars.githubusercontent.com/u/5038441?v=3","gravatar_id":"","url":"https://api.github.com/users/Particular","html_url":"https://github.com/Particular","followers_url":"https://api.github.com/users/Particular/followers","following_url":"https://api.github.com/users/Particular/following{/other_user}","gists_url":"https://api.github.com/users/Particular/gists{/gist_id}","starred_url":"https://api.github.com/users/Particular/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Particular/subscriptions","organizations_url":"https://api.github.com/users/Particular/orgs","repos_url":"https://api.github.com/users/Particular/repos","events_url":"https://api.github.com/users/Particular/events{/privacy}","received_events_url":"https://api.github.com/users/Particular/received_events","type":"Organization","site_admin":false},"repo":{"id":1056713,"name":"NServiceBus","full_name":"Particular/NServiceBus","owner":{"login":"Particular","id":5038441,"avatar_url":"https://avatars.githubusercontent.com/u/5038441?v=3","gravatar_id":"","url":"https://api.github.com/users/Particular","html_url":"https://github.com/Particular","followers_url":"https://api.github.com/users/Particular/followers","following_url":"https://api.github.com/users/Particular/following{/other_user}","gists_url":"https://api.github.com/users/Particular/gists{/gist_id}","starred_url":"https://api.github.com/users/Particular/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Particular/subscriptions","organizations_url":"https://api.github.com/users/Particular/orgs","repos_url":"https://api.github.com/users/Particular/repos","events_url":"https://api.github.com/users/Particular/events{/privacy}","received_events_url":"https://api.github.com/users/Particular/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Particular/NServiceBus","description":"The most popular service bus for .NET","fork":false,"url":"https://api.github.com/repos/Particular/NServiceBus","forks_url":"https://api.github.com/repos/Particular/NServiceBus/forks","keys_url":"https://api.github.com/repos/Particular/NServiceBus/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Particular/NServiceBus/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Particular/NServiceBus/teams","hooks_url":"https://api.github.com/repos/Particular/NServiceBus/hooks","issue_events_url":"https://api.github.com/repos/Particular/NServiceBus/issues/events{/number}","events_url":"https://api.github.com/repos/Particular/NServiceBus/events","assignees_url":"https://api.github.com/repos/Particular/NServiceBus/assignees{/user}","branches_url":"https://api.github.com/repos/Particular/NServiceBus/branches{/branch}","tags_url":"https://api.github.com/repos/Particular/NServiceBus/tags","blobs_url":"https://api.github.com/repos/Particular/NServiceBus/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Particular/NServiceBus/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Particular/NServiceBus/git/refs{/sha}","trees_url":"https://api.github.com/repos/Particular/NServiceBus/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Particular/NServiceBus/statuses/{sha}","languages_url":"https://api.github.com/repos/Particular/NServiceBus/languages","stargazers_url":"https://api.github.com/repos/Particular/NServiceBus/stargazers","contributors_url":"https://api.github.com/repos/Particular/NServiceBus/contributors","subscribers_url":"https://api.github.com/repos/Particular/NServiceBus/subscribers","subscription_url":"https://api.github.com/repos/Particular/NServiceBus/subscription","commits_url":"https://api.github.com/repos/Particular/NServiceBus/commits{/sha}","git_commits_url":"https://api.github.com/repos/Particular/NServiceBus/git/commits{/sha}","comments_url":"https://api.github.com/repos/Particular/NServiceBus/comments{/number}","issue_comment_url":"https://api.github.com/repos/Particular/NServiceBus/issues/comments{/number}","contents_url":"https://api.github.com/repos/Particular/NServiceBus/contents/{+path}","compare_url":"https://api.github.com/repos/Particular/NServiceBus/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Particular/NServiceBus/merges","archive_url":"https://api.github.com/repos/Particular/NServiceBus/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Particular/NServiceBus/downloads","issues_url":"https://api.github.com/repos/Particular/NServiceBus/issues{/number}","pulls_url":"https://api.github.com/repos/Particular/NServiceBus/pulls{/number}","milestones_url":"https://api.github.com/repos/Particular/NServiceBus/milestones{/number}","notifications_url":"https://api.github.com/repos/Particular/NServiceBus/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Particular/NServiceBus/labels{/name}","releases_url":"https://api.github.com/repos/Particular/NServiceBus/releases{/id}","created_at":"2010-11-06T12:54:52Z","updated_at":"2015-07-31T00:04:47Z","pushed_at":"2015-07-30T17:06:13Z","git_url":"git://github.com/Particular/NServiceBus.git","ssh_url":"git@github.com:Particular/NServiceBus.git","clone_url":"https://github.com/Particular/NServiceBus.git","svn_url":"https://github.com/Particular/NServiceBus","homepage":"http://particular.net/nservicebus","size":223205,"stargazers_count":755,"watchers_count":755,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":434,"mirror_url":null,"open_issues_count":145,"forks":434,"open_issues":145,"watchers":755,"default_branch":"develop"}},"base":{"label":"Particular:develop","ref":"develop","sha":"fa14cceff1c41fae5096cb1cff7381c2236c37c4","user":{"login":"Particular","id":5038441,"avatar_url":"https://avatars.githubusercontent.com/u/5038441?v=3","gravatar_id":"","url":"https://api.github.com/users/Particular","html_url":"https://github.com/Particular","followers_url":"https://api.github.com/users/Particular/followers","following_url":"https://api.github.com/users/Particular/following{/other_user}","gists_url":"https://api.github.com/users/Particular/gists{/gist_id}","starred_url":"https://api.github.com/users/Particular/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Particular/subscriptions","organizations_url":"https://api.github.com/users/Particular/orgs","repos_url":"https://api.github.com/users/Particular/repos","events_url":"https://api.github.com/users/Particular/events{/privacy}","received_events_url":"https://api.github.com/users/Particular/received_events","type":"Organization","site_admin":false},"repo":{"id":1056713,"name":"NServiceBus","full_name":"Particular/NServiceBus","owner":{"login":"Particular","id":5038441,"avatar_url":"https://avatars.githubusercontent.com/u/5038441?v=3","gravatar_id":"","url":"https://api.github.com/users/Particular","html_url":"https://github.com/Particular","followers_url":"https://api.github.com/users/Particular/followers","following_url":"https://api.github.com/users/Particular/following{/other_user}","gists_url":"https://api.github.com/users/Particular/gists{/gist_id}","starred_url":"https://api.github.com/users/Particular/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Particular/subscriptions","organizations_url":"https://api.github.com/users/Particular/orgs","repos_url":"https://api.github.com/users/Particular/repos","events_url":"https://api.github.com/users/Particular/events{/privacy}","received_events_url":"https://api.github.com/users/Particular/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Particular/NServiceBus","description":"The most popular service bus for .NET","fork":false,"url":"https://api.github.com/repos/Particular/NServiceBus","forks_url":"https://api.github.com/repos/Particular/NServiceBus/forks","keys_url":"https://api.github.com/repos/Particular/NServiceBus/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Particular/NServiceBus/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Particular/NServiceBus/teams","hooks_url":"https://api.github.com/repos/Particular/NServiceBus/hooks","issue_events_url":"https://api.github.com/repos/Particular/NServiceBus/issues/events{/number}","events_url":"https://api.github.com/repos/Particular/NServiceBus/events","assignees_url":"https://api.github.com/repos/Particular/NServiceBus/assignees{/user}","branches_url":"https://api.github.com/repos/Particular/NServiceBus/branches{/branch}","tags_url":"https://api.github.com/repos/Particular/NServiceBus/tags","blobs_url":"https://api.github.com/repos/Particular/NServiceBus/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Particular/NServiceBus/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Particular/NServiceBus/git/refs{/sha}","trees_url":"https://api.github.com/repos/Particular/NServiceBus/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Particular/NServiceBus/statuses/{sha}","languages_url":"https://api.github.com/repos/Particular/NServiceBus/languages","stargazers_url":"https://api.github.com/repos/Particular/NServiceBus/stargazers","contributors_url":"https://api.github.com/repos/Particular/NServiceBus/contributors","subscribers_url":"https://api.github.com/repos/Particular/NServiceBus/subscribers","subscription_url":"https://api.github.com/repos/Particular/NServiceBus/subscription","commits_url":"https://api.github.com/repos/Particular/NServiceBus/commits{/sha}","git_commits_url":"https://api.github.com/repos/Particular/NServiceBus/git/commits{/sha}","comments_url":"https://api.github.com/repos/Particular/NServiceBus/comments{/number}","issue_comment_url":"https://api.github.com/repos/Particular/NServiceBus/issues/comments{/number}","contents_url":"https://api.github.com/repos/Particular/NServiceBus/contents/{+path}","compare_url":"https://api.github.com/repos/Particular/NServiceBus/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Particular/NServiceBus/merges","archive_url":"https://api.github.com/repos/Particular/NServiceBus/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Particular/NServiceBus/downloads","issues_url":"https://api.github.com/repos/Particular/NServiceBus/issues{/number}","pulls_url":"https://api.github.com/repos/Particular/NServiceBus/pulls{/number}","milestones_url":"https://api.github.com/repos/Particular/NServiceBus/milestones{/number}","notifications_url":"https://api.github.com/repos/Particular/NServiceBus/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Particular/NServiceBus/labels{/name}","releases_url":"https://api.github.com/repos/Particular/NServiceBus/releases{/id}","created_at":"2010-11-06T12:54:52Z","updated_at":"2015-07-31T00:04:47Z","pushed_at":"2015-07-30T17:06:13Z","git_url":"git://github.com/Particular/NServiceBus.git","ssh_url":"git@github.com:Particular/NServiceBus.git","clone_url":"https://github.com/Particular/NServiceBus.git","svn_url":"https://github.com/Particular/NServiceBus","homepage":"http://particular.net/nservicebus","size":223205,"stargazers_count":755,"watchers_count":755,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":434,"mirror_url":null,"open_issues_count":145,"forks":434,"open_issues":145,"watchers":755,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/Particular/NServiceBus/pulls/2788"},"html":{"href":"https://github.com/Particular/NServiceBus/pull/2788"},"issue":{"href":"https://api.github.com/repos/Particular/NServiceBus/issues/2788"},"comments":{"href":"https://api.github.com/repos/Particular/NServiceBus/issues/2788/comments"},"review_comments":{"href":"https://api.github.com/repos/Particular/NServiceBus/pulls/2788/comments"},"review_comment":{"href":"https://api.github.com/repos/Particular/NServiceBus/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Particular/NServiceBus/pulls/2788/commits"},"statuses":{"href":"https://api.github.com/repos/Particular/NServiceBus/statuses/5fcf75075d34524a7703f6f43561c6a28b656854"}}}}