in Hands-on lab/lab-files/src/src/PartsUnlimitedWebsite/Startup.cs [32:108]
public void ConfigureServices(IServiceCollection services)
{
service = services;
//If this type is present - we're on mono
var runningOnMono = Type.GetType("Mono.Runtime") != null;
var sqlConnectionString = Configuration[ConfigurationPath.Combine("ConnectionStrings", "DefaultConnectionString")];
var useInMemoryDatabase = string.IsNullOrWhiteSpace(sqlConnectionString);
if (useInMemoryDatabase || runningOnMono)
{
sqlConnectionString = "";
}
// Add EF services to the services container
services.AddDbContext<PartsUnlimitedContext>(options => {
if (!string.IsNullOrWhiteSpace(sqlConnectionString))
{
options.UseSqlServer(sqlConnectionString);
}
else
{
options.UseInMemoryDatabase("Test");
}
});
// Add Identity services to the services container
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<PartsUnlimitedContext>()
.AddDefaultTokenProviders();
// Configure admin policies
services.AddAuthorization(auth =>
{
auth.AddPolicy(AdminConstants.Role,
authBuilder =>
{
authBuilder.RequireClaim(AdminConstants.ManageStore.Name, AdminConstants.ManageStore.Allowed);
});
});
// Add implementations
services.AddSingleton<IMemoryCache, MemoryCache>();
services.AddScoped<IOrdersQuery, OrdersQuery>();
services.AddScoped<IRaincheckQuery, RaincheckQuery>();
services.AddSingleton<ITelemetryProvider, EmptyTelemetryProvider>();
services.AddScoped<IProductSearch, StringContainsProductSearch>();
SetupRecommendationService(services);
services.AddScoped<IWebsiteOptions>(p =>
{
var telemetry = p.GetRequiredService<ITelemetryProvider>();
return new ConfigurationWebsiteOptions(Configuration.GetSection("WebsiteOptions"), telemetry);
});
services.AddScoped<IApplicationInsightsSettings>(p =>
{
return new ConfigurationApplicationInsightsSettings(Configuration.GetSection(ConfigurationPath.Combine("Keys", "ApplicationInsights")));
});
services.AddApplicationInsightsTelemetry(Configuration);
// We need access to these settings in a static extension method, so DI does not help us :(
ContentDeliveryNetworkExtensions.Configuration = new ContentDeliveryNetworkConfiguration(Configuration.GetSection("CDN"));
services.AddControllersWithViews();
services.AddMemoryCache();
services.AddDistributedMemoryCache();
// Add session related services.
//services.AddCaching();
services.AddSession();
}