private static void ConfigureServicesInternal()

in src/app/ContosoTraders.Api.Core/DependencyInjection.cs [73:110]


    private static void ConfigureServicesInternal(IServiceCollection services, IConfiguration configuration)
    {
        // injecting auto-mapper
        services.AddAutoMapper(typeof(AutoMapperProfile));

        // inject mediatr
        services.AddMediatR(Assembly.GetExecutingAssembly());

        // inject ef-core dbcontexts (after fetching connection string from azure keyvault).
        var productsDbConnectionString = configuration[KeyVaultConstants.SecretNameProductsDbConnectionString];
        services.AddDbContext<ProductsDbContext>(options => options.UseSqlServer(productsDbConnectionString));

        var profilesDbConnectionString = configuration[KeyVaultConstants.SecretNameProfilesDbConnectionString];
        services.AddDbContext<ProfilesDbContext>(options => options.UseSqlServer(profilesDbConnectionString));

        // injecting the cosmosdb clients
        var stocksDatabaseName = configuration[KeyVaultConstants.SecretNameStocksDbName];
        var stocksDbConnectionString = configuration[KeyVaultConstants.SecretNameStocksDbConnectionString];
        services.AddSingleton(_ => new CosmosClient(stocksDbConnectionString).GetDatabase(stocksDatabaseName));

        var cartsDatabaseName = configuration[KeyVaultConstants.SecretNameCartsDbName];
        var cartsDbConnectionString = configuration[KeyVaultConstants.SecretNameCartsDbConnectionString];
        services.AddSingleton(_ => new CosmosClient(cartsDbConnectionString).GetDatabase(cartsDatabaseName));

        // inject services
        services
            .AddScoped<ICartService, CartService>()
            .AddScoped<IProductService, ProductService>()
            .AddScoped<IStockService, StockService>()
            .AddScoped<IProfileService, ProfileService>()
            .AddScoped<IImageAnalysisService, ImageAnalysisService>()
            .AddScoped<IImageSearchService, ImageSearchService>();

        // inject repositories
        services
            .AddScoped<ICartRepository, CartRepository>()
            .AddScoped<IStockRepository, StockRepository>();
    }