对 FluentMigrator 使用依赖注入时,IMigrationRunner 为 null

问题描述

描述错误 尝试在 Azure Functions v3 应用中使用 FluentMigrator,并通过依赖注入实现。使用的数据库是 Postgre。

在尝试注入 IMigrationRunner 或尝试在 IServiceProvider 中访问它时遇到“未将对象引用设置为对象的实例”。

复制 按照项目快速启动的步骤进行操作。重要代码的片段在这里

Startup.cs:

// builder is an instance of IFunctionsHostBuilder
builder.Services.AddFluentMigratorCore()
                            .ConfigureRunner(runner => runner
                                .AddPostgres()
                                .WithGlobalConnectionString("xx")
                                .ScanIn(Assembly.GetExecutingAssembly()).For.Migrations()      
                            )
                            .AddLogging(log => log.AddFluentMigratorConsole())
                            .BuildServiceProvider(false); //Tried with this commented out too

DbMigrations 文件 - 尝试 1:

这个根本不会运行 - IMigrationRunner 为空,所以 DI 不能启动它

公共类 DatabaseMigrations : IDatabaseMigrations { 私人 ILogger 记录器; 私有只读 IMigrationRunner 运行程序;

   /// <summary>
   /// Database migrations implementation
   /// </summary>
   /// <param name="logger"></param>
   public DatabaseMigrations(ILogger<DatabaseMigrations> logger,IMigrationRunner runner)
   {
       this.logger = logger;
       this.runner = runner;
   }

   public void Up()
   {
       runner.MigrateUp();
   }

} 尝试 2:

这个尝试获取所需服务失败,同样的错误

公共类 DatabaseMigrations : IDatabaseMigrations { 私人 ILogger 记录器;
私有只读 IServiceProvider serviceProvider; 私有只读 IMigrationRunner 运行程序;

    /// <summary>
    /// Database migrations implementation
    /// </summary>
    /// <param name="logger"></param>
    public DatabaseMigrations(ILogger<DatabaseMigrations> logger,IServiceProvider serviceProvider)
    {
        this.serviceProvider = serviceProvider;
        this.logger = logger;
        this.runner = serviceProvider.GetrequiredService<IMigrationRunner>();            
    }
 
    public void Up()
    {
          runner.MigrateUp(); 
    }
}

信息:

  • Mac OS Platform Dotnet core 3.1 for Azure functions v3(也有 已安装 dotnet 5)
  • 已安装的软件包:FluentMigrator v3.2.15
  • FluentMigrator.Runner v3.2.15
  • FluentMigrator.Runner.Postgre v3.2.15(已安装和未安装此版本均已尝试)
  • FluentMigrator.Runner.Core v3.2.15(已安装和未安装此软件均已尝试)数据库 - Postgres

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)