用实例而不是类型替换 EF Core 服务

Replace EF Core service with instance instead of type

在非 ASP.NET 环境中(例如控制台程序、单元测试或 dotnet ef CLI 工具)我可以使用 DbContextOptionsBuilder:

替换 EF Core 服务
builder.ReplaceService<IRelationalDatabaseCreator, MyCreator>();
builder.ReplaceService<IMigrationsAssembly, MyAssembly>();

对于MyCreatorMyAssembly,它使用类型及其默认构造函数。如何用 实例 替换服务(我可以自定义)?

一些(无效的)代码来说明我的意思:

var myCreator = new MyCreator("foo", 123);
builder.Replace<IRelationalDatabaseCreator>(myCreator);

How do I replace a service with an instance instead (that I can customize)?

你不能。

For MyCreator or MyAssembly, it uses the type and its default constructor.

这不太正确(否则您将无法用依赖项替换 EF Core 服务)。

指定的服务实现类型实例与任何其他实例一样从 DI 容器解析,因此您可以使用任何现有的构造函数依赖注入机制来配置它(例如,类似于 EF Core 提供配置的方式 DbContextOptions DbContext 构造函数)。这里唯一具体的是,这些依赖项必须在应用程序服务容器中注册(DbContext 已注册),因为构建器不允许注册服务。