Startup.cs

using Microsoft.eShopWeb.ApplicationCore.Interfaces; using Microsoft.eShopWeb.ApplicationCore.Services; using Microsoft.eShopWeb.Infrastructure.Data; using Microsoft.eShopWeb.Infrastructure.Identity; using Microsoft.eShopWeb.Infrastructure.Logging; using Microsoft.eShopWeb.Infrastructure.Services; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using Microsoft.eShopWeb.Web.Interfaces; using Microsoft.eShopWeb.Web.Services; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System; using System.Text; namespace Microsoft.eShopWeb.Web { public class Startup { private IServiceCollection _services; public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services, IHostingEnvironment env) { if (env.IsDevelopment()) { ConfigureInMemoryDatabases(services); // ConfigureDatabases(services); } else { ConfigureDatabases(services); } services.AddIdentity<ApplicationUser, IdentityRole>() .AddEntityFrameworkStores<AppIdentityDbContext>() .AddDefaultTokenProviders(); services.ConfigureApplicationCookie(options => { options.Cookie.HttpOnly = true; options.ExpireTimeSpan = TimeSpan.FromHours(1); options.LoginPath = "/Account/Signin"; options.LogoutPath = "/Account/Signout"; options.Cookie = new CookieBuilder { IsEssential = true // required for auth to work without explicit user consent; adjust to suit your privacy policy }; }); services.AddScoped(typeof(IRepository<>), typeof(EfRepository<>)); services.AddScoped(typeof(IAsyncRepository<>), typeof(EfRepository<>)); services.AddScoped<ICatalogService, CachedCatalogService>(); services.AddScoped<IBasketService, BasketService>(); services.AddScoped<IBasketViewModelService, BasketViewModelService>(); services.AddScoped<IOrderService, OrderService>(); services.AddScoped<IOrderRepository, OrderRepository>(); services.AddScoped<CatalogService>(); services.Configure<CatalogSettings>(Configuration); services.AddSingleton<IUriComposer>(new UriComposer(Configuration.Get<CatalogSettings>())); services.AddScoped(typeof(IAppLogger<>), typeof(LoggerAdapter<>)); services.AddTransient<IEmailSender, EmailSender>(); // Add memory cache services services.AddMemoryCache(); services.AddMvc() .SetCompatibilityVersion(AspNetCore.Mvc.CompatibilityVersion.Version_2_1); _services = services; } private void ConfigureInMemoryDatabases(IServiceCollection services) { // use in-memory database services.AddDbContext<CatalogContext>(c => c.UseInMemoryDatabase("Catalog")); // Add Identity DbContext services.AddDbContext<AppIdentityDbContext>(options => options.UseInMemoryDatabase("Identity")); } private void ConfigureDatabases(IServiceCollection services) { // use real database // Requires LocalDB which can be installed with SQL Server Express 2016 // https://www.microsoft.com/en-us/download/details.aspx?id=54284 services.AddDbContext<CatalogContext>(c => c.UseSqlServer(Configuration.GetConnectionString("CatalogConnection"))); // Add Identity DbContext services.AddDbContext<AppIdentityDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("IdentityConnection"))); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); ListAllRegisteredServices(app); app.UseDatabaseErrorPage(); } else { app.UseExceptionHandler("/Catalog/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAuthentication(); app.UseMvc(); } private void ListAllRegisteredServices(IApplicationBuilder app) { app.Map("/allservices", builder => builder.Run(async context => { var sb = new StringBuilder(); sb.Append("<h1>All Services</h1>"); sb.Append("<table><thead>"); sb.Append("<tr><th>Type</th><th>Lifetime</th><th>Instance</th></tr>"); sb.Append("</thead><tbody>"); foreach (var svc in _services) { sb.Append("<tr>"); sb.Append($"<td>{svc.ServiceType.FullName}</td>"); sb.Append($"<td>{svc.Lifetime}</td>"); sb.Append($"<td>{svc.ImplementationType?.FullName}</td>"); sb.Append("</tr>"); } sb.Append("</tbody></table>"); await context.Response.WriteAsync(sb.ToString()); })); } } }

Be the first to comment

You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.