asp.net核心无法将启动扩展添加到startup.cs

时间:2019-05-09 06:22:01

标签: c# entity-framework

我在这里错过了一些东西。我一直在关注this 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);

所以我考虑做类似的事情-在我的configure方法的末尾添加一个方法。

    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),但是在我的启动中。cs除了标准提供的方法之外,我没有其他选择可以添加此方法或其他方法。

不过我还是添加了它:

        app.EnsureMigrationsAndInitialisationRun();

并出现以下错误。

  

错误CS1061'IApplicationBuilder'不包含以下定义:   “ EnsureMigrationsAndInitialisationRun”,没有可用的扩展名   方法“ EnsureMigrationsAndInitialisationRun”接受第一个   可以找到类型为“ IApplicationBuilder”的参数(您是否丢失了   using指令还是程序集引用?)

我原本打算向应用程序添加一些项目...包括会话中间件,但这也没有出现。

如何将类似会话中间件的方法以及这种情况下的初始化方法添加到configure方法中?

为什么这些静态方法没有显示出来?

编辑..

我能够通过指令app.UseMiddleware<ConfigureSessionMiddleware>();添加一个中间件

但是我仍然不知道将初始化文件添加到应用程序管道末尾需要做什么

1 个答案:

答案 0 :(得分:2)

您没有在扩展方法中使用关键字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方法。