Created
June 29, 2016 19:58
-
-
Save lodejard/93f00f23bd8ee3f5f9fb64232e9503a9 to your computer and use it in GitHub Desktop.
Startup with IoC enabled logger providers
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Threading.Tasks; | |
using Microsoft.AspNet.Builder; | |
using Microsoft.AspNet.Hosting; | |
using Microsoft.AspNet.Identity.EntityFramework; | |
using Microsoft.Data.Entity; | |
using Microsoft.Extensions.Configuration; | |
using Microsoft.Extensions.DependencyInjection; | |
using Microsoft.Extensions.Logging; | |
using WebApplication1.Models; | |
using WebApplication1.Services; | |
namespace WebApplication1 | |
{ | |
public class Startup | |
{ | |
public Startup( | |
IHostingEnvironment env, | |
ILoggerFactory loggerFactory) | |
{ | |
// Set up configuration sources. | |
var builder = new ConfigurationBuilder() | |
.AddJsonFile("appsettings.json") | |
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true); | |
if (env.IsDevelopment()) | |
{ | |
// For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709 | |
builder.AddUserSecrets(); | |
// This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately. | |
builder.AddApplicationInsightsSettings(developerMode: true); | |
} | |
builder.AddEnvironmentVariables(); | |
Configuration = builder.Build(); | |
/* LoggerFactory initialization moved earlier */ | |
LoggerFactory = loggerFactory; | |
LoggerFactory.AddConsole(Configuration.GetSection("Logging")); | |
LoggerFactory.AddDebug(); | |
} | |
public IConfigurationRoot Configuration { get; set; } | |
public ILoggerFactory LoggerFactory { get; set; } | |
// This method gets called by the runtime. Use this method to add services to the container. | |
public void ConfigureServices(IServiceCollection services) | |
{ | |
// Add framework services. | |
services.AddApplicationInsightsTelemetry(Configuration); | |
services.AddEntityFramework() | |
.AddSqlServer() | |
.AddDbContext<ApplicationDbContext>(options => | |
options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"])); | |
services.AddIdentity<ApplicationUser, IdentityRole>() | |
.AddEntityFrameworkStores<ApplicationDbContext>() | |
.AddDefaultTokenProviders(); | |
services.AddMvc(); | |
// Add application services. | |
services.AddTransient<IEmailSender, AuthMessageSender>(); | |
services.AddTransient<ISmsSender, AuthMessageSender>(); | |
} | |
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. | |
public void Configure( | |
IApplicationBuilder app, | |
IHostingEnvironment env, | |
IEnumerable<ILoggerProvider> loggerProviders) | |
{ | |
/* LoggerFactory IoC-based providers added later */ | |
foreach (var provider in loggerProviders) | |
{ | |
LoggerFactory.AddProvider(provider); | |
} | |
app.UseApplicationInsightsRequestTelemetry(); | |
if (env.IsDevelopment()) | |
{ | |
app.UseBrowserLink(); | |
app.UseDeveloperExceptionPage(); | |
app.UseDatabaseErrorPage(); | |
} | |
else | |
{ | |
app.UseExceptionHandler("/Home/Error"); | |
// For more details on creating database during deployment see http://go.microsoft.com/fwlink/?LinkID=615859 | |
try | |
{ | |
using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>() | |
.CreateScope()) | |
{ | |
serviceScope.ServiceProvider.GetService<ApplicationDbContext>() | |
.Database.Migrate(); | |
} | |
} | |
catch { } | |
} | |
app.UseIISPlatformHandler(options => options.AuthenticationDescriptions.Clear()); | |
app.UseApplicationInsightsExceptionTelemetry(); | |
app.UseStaticFiles(); | |
app.UseIdentity(); | |
// To configure external authentication please see http://go.microsoft.com/fwlink/?LinkID=532715 | |
app.UseMvc(routes => | |
{ | |
routes.MapRoute( | |
name: "default", | |
template: "{controller=Home}/{action=Index}/{id?}"); | |
}); | |
} | |
// Entry point for the application. | |
public static void Main(string[] args) => WebApplication.Run<Startup>(args); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment