如何解决对 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 举报,一经查实,本站将立刻删除。