private static void Init() { if (Interlocked.CompareExchange(ref _initialized, 1, 0) != 0) return; Service = ServiceBuilder.Build(); }
private static void ProcessSettings(Service service, IReadOnlyDictionary<string, string> settings) { if (settings.ContainsKey("BasePath")) service.BasePath = settings["BasePath"]; if (settings.ContainsKey("Host")) service.Host = settings["Host"]; if (settings.Keys.Any(k => k.StartsWith("Info"))) service.Info = new Info(); if (settings.ContainsKey("InfoDescription")) service.Info.Description = settings["InfoDescription"]; if (settings.ContainsKey("InfoVersion")) service.Info.Version = settings["InfoVersion"]; if (settings.ContainsKey("InfoTermsOfService")) service.Info.TermsOfService = settings["InfoTermsOfService"]; if (settings.ContainsKey("InfoTitle")) service.Info.Title = settings["InfoTitle"]; if (settings.Keys.Any(k => k.StartsWith("InfoContact"))) service.Info.Contact = new InfoContact(); if (settings.ContainsKey("InfoContactName")) service.Info.Contact.Name = settings["InfoContactName"]; if (settings.ContainsKey("InfoContactUrl")) service.Info.Contact.Url = settings["InfoContactUrl"]; if (settings.ContainsKey("InfoContactEmail")) service.Info.Contact.Email = settings["InfoContactEmail"]; if (settings.Keys.Any(k => k.StartsWith("InfoLicense"))) service.Info.License = new InfoLicense(); if (settings.ContainsKey("InfoLicenseUrl")) service.Info.License.Url = settings["InfoLicenseUrl"]; if (settings.ContainsKey("InfoLicenseName")) service.Info.License.Name = settings["InfoLicenseName"]; }
internal static string Process(Service service) { var sb = new StringBuilder(); var sw = new StringWriter(sb); using (JsonWriter writer = new JsonTextWriter(sw)) { service.Serialize(writer); } return sb.ToString(); }
private static Service BuildService() { const string sectionName = "swaggerwcf"; var config = (SwaggerWcfSection) (ConfigurationManager.GetSection(sectionName) ?? new SwaggerWcfSection()); var definitionsTypesList = new List<Type>(); var service = new Service(); List<string> hiddenTags = GetHiddenTags(config); IReadOnlyDictionary<string, string> settings = GetSettings(config); ProcessSettings(service, settings); BuildPaths(service, hiddenTags, definitionsTypesList); service.Definitions = DefinitionsBuilder.Process(hiddenTags, definitionsTypesList); return service; }
private static void BuildPaths(Service service, IList<string> hiddenTags, IList<Type> definitionsTypesList) { Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); service.Paths = new List<Path>(); foreach (Assembly assembly in assemblies) { IEnumerable<TypeInfo> types; try { types = assembly.DefinedTypes; } catch (Exception) { // ignore assembly and continue continue; } foreach (TypeInfo ti in types) { var da = ti.GetCustomAttribute<SwaggerWcfAttribute>(); if (da == null || hiddenTags.Any(ht => ht == ti.AsType().Name)) continue; var mapper = new Mapper(hiddenTags); IEnumerable<Path> paths = mapper.FindMethods(da.ServicePath, ti.AsType(), definitionsTypesList); service.Paths.AddRange(paths); } } }