public static void Configure(VoyagerConfigurationBuilder builder, IServiceCollection services) { var isRegistered = services.Any(s => s.ImplementationType == typeof(IsRegistered)); if (!isRegistered) { services.AddSingleton <VoyagerOptionsHolder>(); services.AddScoped <IsRegistered>(); services.AddMvcCore().AddApiExplorer(); services.TryAddEnumerable(ServiceDescriptor.Transient <IApiDescriptionProvider, VoyagerApiDescriptionProvider>()); services.AddSingleton <ExceptionHandler, DefaultExceptionHandler>(); var voyagerConfig = new VoyagerConfiguration { EnvironmentName = Environment.GetEnvironmentVariable("VOYAGER_ENVIRONMENT") ?? Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "DEVELOPMENT" }; services.AddSingleton(voyagerConfig); builder.AddAssemblyWith <VoyagerConfigurationBuilder>(); services.AddHttpContextAccessor(); services.TryAddTransient <ModelBinder, DefaultModelBinder>(); services.TryAddTransient <DefaultModelBinder>(); services.AddScoped(typeof(IPipelineBehavior <,>), typeof(ValidationBehavior <,>)); services.AddLogging(); services.AddSingleton <TypeBindingRepository>(); } services.AddValidatorsFromAssemblies(builder.Assemblies); RegisterMediatorHandlers(services, builder.Assemblies); RegisterVoyagerRoutes(services, builder.Assemblies); AddCustomAuthorization(services, builder.Assemblies); services.AddMediatR(builder.Assemblies.ToArray()); }