Recuerda que en las ciencias un error suele tener diversas soluciones, pero nosotros te mostraremos lo más óptimo y mejor.
Solución:
AddDbContext
la implementación solo registra el contexto en sí y sus dependencias comunes en DI. En vez de AddDbContext
llamada, es perfectamente legal registrar manualmente su DbContext:
services.AddTransient();
Además, podría usar un método de fábrica para pasar parámetros (esto es responder a la pregunta):
services.AddTransient(provider =>
//resolve another classes from DI
var anyOtherClass = provider.GetService();
//pass any parameters
return new FooContext(foo, bar);
);
PD, en general, no tienes que registrarte DbContextOptionsFactory
y por defecto DbContextOptions
para resolver DbContext por sí mismo, pero podría ser necesario en casos específicos.
Puede usar esto en startup.cs.
Información detallada: https://docs.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext
Ejemplo detallado: Introducción a ASP.NET Core MVC y Entity Framework Core
public void ConfigureServices(IServiceCollection services)
// Add framework services.
services.AddDbContext(options =>options.
UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
Para registrarse DbContext
como un servicio en IServiceCollection
tiene dos opciones: (suponemos que se va a conectar a una base de datos de SQL Server)
Usando AddDbContext<>
services.AddDbContext(o=>o.UseSqlServer(Your Connection String));
Uso de AddDbContextPool<>
services.AddDbContextPool(o=>o.UseSqlServer(Your Connection String));
como puede ver, estos dos tienen similitudes en términos de escritura, pero de hecho tienen algunas diferencias fundamentales en términos de conceptos. @GabrielLuci tiene una buena respuesta sobre las diferencias entre estos dos: https://stackoverflow.com/a/48444206/1666800
También tenga en cuenta que puede almacenar su conexión string dentro del archivo appsettings.json y simplemente léalo usando: Configuration.GetConnectionString("DefaultConnection")
dentro de ConfigureServices
método en Startup.cs
expediente.
Recuerda que puedes recomendar este tutorial si te fue de ayuda.