Обновление заголовка

Вот где я собирался:

Исправленная фабрика:

public class GenericWebApplicationFactory<TStartup, TContext, TSeed>
    : WebApplicationFactory<TStartup>
    where TStartup : class
    where TContext : DbContext
    where TSeed : class, ISeedDataClass
{
    protected override void ConfigureWebHost(IWebHostBuilder builder)
    {
        base.ConfigureWebHost(builder);
        builder.UseEnvironment("Development");
        builder.ConfigureServices(services =>
        {
            var serviceProvider = new ServiceCollection()
                .AddEntityFrameworkInMemoryDatabase()
                .BuildServiceProvider();

            services.AddSingleton<ISeedDataClass,TSeed >();

            services.AddDbContextPool<TContext>(options =>
            {
                options.UseInMemoryDatabase("InMemoryDbForTesting");
                options.UseInternalServiceProvider(serviceProvider);
                options.EnableSensitiveDataLogging();
            });

            var sp = services.BuildServiceProvider();
            using (var scope = sp.CreateScope())
            {
                var scopedServices = scope.ServiceProvider;
                var db = scopedServices.GetRequiredService<TContext>();
                var logger = scopedServices.GetRequiredService<ILogger<GenericWebApplicationFactory<TStartup, TContext, TSeed>>>();

                var seeder = scopedServices.GetRequiredService<ISeedDataClass>();

                db.Database.EnsureCreated();

                try
                {
                    seeder.InitializeDbForTests();
                }
                catch (Exception ex)
                {
                    logger.LogError(ex, $"An error occurred seeding the database with test messages. Error: {ex.Message}");
                }
            }
        });
    }
}

Исправленная польза:

    _client = new GenericWebApplicationFactory<Startup, GatewayContext, SeedDataClass>().CreateClient();

С примером класса семян:

public interface ISeedDataClass
{
    void InitializeDbForTests();
}

public class SeedDataClass : ISeedDataClass
{
    private readonly GatewayContext _db;

    public SeedDataClass(GatewayContext db)
    {
        _db = db;
    }

    public void InitializeDbForTests()
    {
        _db.Users.AddRange(
            // add some users here
        );

        _db.SaveChanges(true);
    }
}

Теперь я могу заполнить базу данных в памяти, как я считаю нужным, для каждого проекта, где он используется, и теперь мой GenericWebApplicationFactory может быть помещен в вспомогательный пакет lib / nuget, который будет повторно использоваться в других проектах .

5
задан 16 February 2009 в 20:54
поделиться

1 ответ

что-либо после знака хеша (#) является локальной частью URL и не должно вызывать обновление. Кроме того, если Вы имеете #reply в URL в браузере и нажимаете Enter снова в строке поиска, страница не обновлена, Вы просто взяты к #reply части (цель) страницы.

Также отметьте, Вы повреждаете стандарты, не используя полный URL. Необходимо использовать: url=http://server.com/thread.php? $tid#reply id=

PS: Я рекомендовал бы использовать Header("Location: xxxxxxxx"); необходимо поместить обновление в Метатег

6
ответ дан 14 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: