public IDictionary <string, Schema> Create(IList <SwaggerResource> swaggerResources) { var definitions = BoilerPlateDefinitions(); swaggerResources.Where(x => _swaggerFactoryResourceFilterStrategy.ShouldInclude(x.Resource)).Select( r => new { key = _swaggerDefinitionsFactoryNamingStrategy.GetResourceName(r.Resource, r), schema = CreateResourceSchema(r) }).GroupBy(d => d?.key).Select(g => g.First()).ForEach( d => { if (d != null) { definitions.Add(d.key, d.schema); } }); swaggerResources.SelectMany( r => r.Resource.AllContainedItemTypes.Where(x => _swaggerFactoryResourceFilterStrategy.ShouldInclude(x)) .Select( i => new { key = _swaggerDefinitionsFactoryNamingStrategy.GetContainedItemTypeName(r, i), schema = CreateResourceChildSchema(i, r) }).Concat( swaggerResources.SelectMany(s => s.Resource.AllContainedReferences).Select( reference => new { key = _swaggerDefinitionsFactoryNamingStrategy.GetReferenceName(r.Resource, reference), schema = SwaggerDocumentHelper.CreateReferenceSchema(reference) }))).GroupBy(d => d?.key).Select(g => g.First()).ForEach( d => { if (d != null) { definitions.Add(d.key, d.schema); } }); _definitionsFactoryEntityExtensionStrategy.GetEdFiExtensionBridgeDefinitions(swaggerResources) .ForEach(pair => definitions.Add(pair.Key, pair.Value)); return(new SortedDictionary <string, Schema>(definitions)); }