public void ConfigureServices()

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