Estoy tratando de crear una base reutilizable para futuras aplicaciones web hechas con asp net core. Creé una biblioteca que contiene un BaseDbContext que hereda de IdentityDbContext:
public class BaseDbContext : IdentityDbContext<ApplicationUser>
{
public BaseDbContext(DbContextOptions options) : base(options)
{
}
}
Dentro de esta biblioteca hay algunos servicios para iniciar sesión y crear Usuarios.
Cada vez que crearé una nueva aplicación web, haré referencia a la biblioteca y crearé un nuevo DbContext como este:
public class ProjectDbContext : BaseDbContext
{
//some generics DBSET
public ProjectDbContext (DbContextOptions<ProjectDbContext> options) : base(options)
{
}
}
Y en la puesta en marcha:
services.AddDbContext<ProjectDbContext>(options =>
{
options.UseSqlServer(connection);
});
Dado que el servicio para el inicio de sesión y la creación de usuarios requiere una referencia de BaseDbContext, creé un IDbContextFactory
dentro del proyecto base que implementará el proyecto principal de esta manera:
public class ProjectContextFactory : IDbContextFactory
{
private readonly ProjectDbContext _projectDbContext;
public ProjectDbContextFactory(ProjectDbContext remDbContext)
{
_remDbContext = remDbContext;
}
public BaseDbContext GetBaseDbContext()
{
return _projectDbContext;
}
}
Esta fábrica se utilizará dentro del proyecto base para obtener una referencia al BaseDbContext.
¿Es esto algo bueno que hacer? ¿Puede esto crear algún tipo de problemas?
En general, no, esto no es algo bueno.
que contendrá las entidades que se utilizarán para todas las aplicaciones web
Si hay entidades que son comunes a todos los proyectos, entonces se deben tener en cuenta completamente. En otras palabras, tendría un proyecto (su proyecto base) con un contexto como UserContext
, que tendrá sus entidades de User
y Credential
, y luego cualquier otro proyecto tendrá su propio contexto separado que se ocupe de lo que necesita. Si las otras aplicaciones necesitan acceder a los usuarios, lo harán a través de una instancia de UserContext
o, mejor, a través de un servicio, como una API.
Dicho esto, parece que estás rodando tu propia autenticación, lo que no debes hacer enfáticamente . Usar identidad. Y, si necesita compartir eso entre aplicaciones, necesita un proveedor de autenticación centralizado, como Identity Server.