问题描述
描述错误 尝试在 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 (将#修改为@)