用实例而不是类型替换 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>();
对于MyCreator
或MyAssembly
,它使用类型及其默认构造函数。如何用 实例 替换服务(我可以自定义)?
一些(无效的)代码来说明我的意思:
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
已注册),因为构建器不允许注册服务。
在非 ASP.NET 环境中(例如控制台程序、单元测试或 dotnet ef
CLI 工具)我可以使用 DbContextOptionsBuilder
:
builder.ReplaceService<IRelationalDatabaseCreator, MyCreator>();
builder.ReplaceService<IMigrationsAssembly, MyAssembly>();
对于MyCreator
或MyAssembly
,它使用类型及其默认构造函数。如何用 实例 替换服务(我可以自定义)?
一些(无效的)代码来说明我的意思:
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
orMyAssembly
, it uses the type and its default constructor.
这不太正确(否则您将无法用依赖项替换 EF Core 服务)。
指定的服务实现类型实例与任何其他实例一样从 DI 容器解析,因此您可以使用任何现有的构造函数依赖注入机制来配置它(例如,类似于 EF Core 提供配置的方式 DbContextOptions
DbContext
构造函数)。这里唯一具体的是,这些依赖项必须在应用程序服务容器中注册(DbContext
已注册),因为构建器不允许注册服务。