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