Ядро asp.net Проблема с добавлением расширения автозагрузки в startup.cs - PullRequest
0 голосов
/ 09 мая 2019

Я что-то здесь упускаю. Я следил за этим проектом github и в нем автор специально добавляет и расширение статического метода:

public static class StartupExtension
{
    public static void EnsureMigrationsRun(this IApplicationBuilder app, IConfiguration configuration)
    {
        using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
        {
            var dbContextFactory = serviceScope.ServiceProvider.GetService<IDbContextFactory>();
            var allTenants = serviceScope.ServiceProvider.GetService<ITenantProvider>().AllTenants;
            foreach (var tenant in allTenants)
            {
                var context = dbContextFactory.CreateDbContext(tenant, configuration);
                context.Database.Migrate();
            }
        }
    }
}

В своем файле startup.cs он добавил его (последний элемент) в метод configure следующим образом:

       app.EnsureMigrationsRun(Configuration);

Итак, я подумал о том, чтобы сделать нечто подобное - добавить метод в конец моего метода настройки.

    public static void EnsureMigrationsAndInitialisationRun(IApplicationBuilder app)
    {
        using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
        {
            var dbContextFactory = serviceScope.ServiceProvider.GetService<IDbContextFactory>();
            var allTenantConnectionStrings = serviceScope.ServiceProvider.GetService<ISessionServices>().AllTenantConnectionStrings();

            foreach (var tenantConnectionString in allTenantConnectionStrings)
            {
                var context = dbContextFactory.CreateDbContext(tenantConnectionString);
                context.Database.Migrate();
                // Add in the initializations here.
            }
        }
    }

В проекте, который я смотрю, ясно, что его метод доступен для добавления (проверено на intellisense), однако в моем файле startup.cs у меня нет возможности добавить этот или любой другой метод, кроме тех, которые поставляются в стандартной комплектации.

Я все же добавил это:

        app.EnsureMigrationsAndInitialisationRun();

и получил следующую ошибку.

Ошибка CS1061 «IApplicationBuilder» не содержит определения для 'EnsureMigrationsAndInitialisationRun' и нет доступного расширения Метод EnsureMigrationsAndInitialisationRun принимает первый может быть найден аргумент типа 'IApplicationBuilder' (вы пропустили директива об использовании или ссылка на сборку?)

Я намеревался добавить в приложение несколько элементов ... включая промежуточное программное обеспечение сеанса, но оно также не отображается.

Как добавить методы, такие как промежуточное программное обеспечение сеанса, и метод инициализации этого случая в методе configure?

Почему эти статические методы не отображаются?

EDIT ..

Я смог добавить промежуточное ПО по директиве app.UseMiddleware<ConfigureSessionMiddleware>();

Однако я до сих пор не знаю, что мне нужно сделать, чтобы добавить файл инициализации в конец конвейера приложения

1 Ответ

2 голосов
/ 09 мая 2019

Вы не используете ключевое слово this в своем методе расширения, который не делает его методом расширения.

Если вы делаете это таким образом внутри статического класса (в том числе и обязательного), оно работает простоштраф

    public static void EnsureMigrationsAndInitialisationRun(this IApplicationBuilder app)
    {
        using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
        {
            var dbContextFactory = serviceScope.ServiceProvider.GetService<IDbContextFactory>();
            var allTenantConnectionStrings = serviceScope.ServiceProvider.GetService<ISessionServices>().AllTenantConnectionStrings();

            foreach (var tenantConnectionString in allTenantConnectionStrings)
            {
                var context = dbContextFactory.CreateDbContext(tenantConnectionString);
                context.Database.Migrate();
                // Add in the initializations here.
            }
        }
    }

Затем вы можете вызвать

app.EnsureMigrationsAndInitialisationRun();

в вашем Configure методе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...