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);
}