示例#1
0
        protected override void ConfigureWebHost(IWebHostBuilder builder)
        {
            builder.ConfigureServices(services =>
            {
                var descriptor = services.SingleOrDefault(
                    d =>
                    d.ServiceType == typeof(DbContextOptions <ApplicationDbContext>));

                services.Remove(descriptor);

                services.AddLogging(builder =>
                {
                    builder.AddConsole();
                    builder.AddFilter(level => level >= LogLevel.Trace);
                });

                services.AddAuthentication("Test")
                .AddScheme <AuthenticationSchemeOptions, TestAuthHandler>("Test", options => { });

                services.AddAuthorization();

                services.AddTransient <IAuthService, AuthService>();
                services.AddTransient <IUserService, UserService>();
                services.AddTransient <IUserDataService, UserDataService>();
                services.AddTransient <IJournalService, JournalService>();
                services.AddTransient <IEntryService, EntryService>();

                var connection = new SqliteConnection("DataSource=:memory:;Foreign Keys=false");
                connection.Open();
                services.AddDbContext <ApplicationDbContext>(options =>
                {
                    options.UseSqlite(connection);
                    options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
                });

                services.Configure <IdentityOptions>(options =>
                {
                    options.User.RequireUniqueEmail = true;
                });

                var sp = services.BuildServiceProvider();

                using var scope    = sp.CreateScope();
                var scopedServices = scope.ServiceProvider;
                var db             = scopedServices.GetRequiredService <ApplicationDbContext>();

                db.Database.OpenConnection();
                db.Database.EnsureCreated();
            });
        }