public static IDicomServerBuilder AddDicomServer()

in src/Microsoft.Health.Dicom.Api/Registration/DicomServerServiceCollectionExtensions.cs [75:144]


        public static IDicomServerBuilder AddDicomServer(
            this IServiceCollection services,
            IConfiguration configurationRoot,
            Action<DicomServerConfiguration> configureAction = null)
        {
            EnsureArg.IsNotNull(services, nameof(services));

            var dicomServerConfiguration = new DicomServerConfiguration();

            configurationRoot?.GetSection(DicomServerConfigurationSectionName).Bind(dicomServerConfiguration);
            configureAction?.Invoke(dicomServerConfiguration);

            services.AddSingleton(Options.Create(dicomServerConfiguration));
            services.AddSingleton(Options.Create(dicomServerConfiguration.Security));
            services.AddSingleton(Options.Create(dicomServerConfiguration.Features));
            services.AddSingleton(Options.Create(dicomServerConfiguration.Services.DeletedInstanceCleanup));
            services.AddSingleton(Options.Create(dicomServerConfiguration.Services.StoreServiceSettings));
            services.AddSingleton(Options.Create(dicomServerConfiguration.Services.ExtendedQueryTag));
            services.AddSingleton(Options.Create(dicomServerConfiguration.Services.DataPartition));
            services.AddSingleton(Options.Create(dicomServerConfiguration.Audit));
            services.AddSingleton(Options.Create(dicomServerConfiguration.Swagger));

            services.RegisterAssemblyModules(Assembly.GetExecutingAssembly(), dicomServerConfiguration);
            services.RegisterAssemblyModules(typeof(InitializationModule).Assembly, dicomServerConfiguration);
            services.AddApplicationInsightsTelemetry();

            services.AddOptions();

            services
                .AddMvc(options =>
                {
                    options.EnableEndpointRouting = false;
                    options.RespectBrowserAcceptHeader = true;
                })
                .AddJsonSerializerOptions(o => o.ConfigureDefaultDicomSettings());

            services.AddApiVersioning(c =>
            {
                c.ApiVersionReader = new UrlSegmentApiVersionReader();
                c.AssumeDefaultVersionWhenUnspecified = true;
                c.DefaultApiVersion = new ApiVersion(1, 0, "prerelease");
                c.ReportApiVersions = true;
                c.UseApiBehavior = false;
            });

            services.AddVersionedApiExplorer(options =>
            {
                // The format for this is 'v'major[.minor][-status] ex. v1.0-prerelease
                options.GroupNameFormat = "'v'VVV";
                options.SubstituteApiVersionInUrl = true;
            });

            services.AddTransient<IConfigureOptions<SwaggerGenOptions>, ConfigureSwaggerOptions>();
            services.AddSwaggerGen(options =>
            {
                options.OperationFilter<SwaggerDefaultValues>();
                options.OperationFilter<ErrorCodeOperationFilter>();
                options.OperationFilter<RetrieveOperationFilter>();
                options.DocumentFilter<ReflectionTypeFilter>();
            });

            services.AddSingleton<IUrlResolver, UrlResolver>();

            services.RegisterAssemblyModules(typeof(DicomMediatorExtensions).Assembly, dicomServerConfiguration.Features, dicomServerConfiguration.Services);
            services.AddTransient<IStartupFilter, DicomServerStartupFilter>();

            services.TryAddSingleton<RecyclableMemoryStreamManager>();

            return new DicomServerBuilder(services);
        }