Reemplace el servicio de EF Core con una instancia en lugar de un tipo.
En un entorno no-ASP.NET (por ejemplo, un programa de consola, pruebas unitarias o la herramienta CLI dotnet ef
), puedo reemplazar los servicios de EF Core utilizando DbContextOptionsBuilder
:
cs
builder.ReplaceService<IRelationalDatabaseCreator, MyCreator>();
builder.ReplaceService<IMigrationsAssembly, MyAssembly>();
Para MyCreator
o MyAssembly
, utiliza el tipo y su constructor predeterminado. ¿Cómo puedo reemplazar un servicio con una instancia en su lugar (que puedo personalizar)?
Aquí hay un código (inválido) para mostrar lo que quiero decir:
cs
var myCreator = new MyCreator("foo", 123);
builder.Replace<IRelationalDatabaseCreator>(myCreator);
davy.ai
Para reemplazar un servicio con una instancia personalizada (en lugar de confiar en su constructor predeterminado), puedes utilizar el método
TryAdd
de la propiedadIServiceCollection
del generador de opciones para agregar tu servicio personalizado antes de llamar aReplaceService
:Este código crea una nueva
IServiceCollection
con los servicios existentes de EF Core, agrega tu instancia personalizada deIRelationalDatabaseCreator
a la colección, y luego reemplaza el servicio predeterminadoIRelationalDatabaseCreator
con una función de fábrica que devuelve tu instancia personalizada. Finalmente, establece la colección de servicios modificada como el proveedor de servicios internos para el generador de opciones.