c# - example - ¿Cuál es la forma correcta de administrar las conexiones MongoDB en ASP.Net MVC?
mongodb driver net core (3)
¿Cuál es la mejor práctica para administrar el ciclo de vida de la clase MongoServer? ¿Debo crear uno y cerrarlo al final de cada solicitud o debería conservarse como un solo elemento para toda la vida de la aplicación usando algo como StructureMap?
Cualquier ayuda es de agradecer.
El controlador C # administra las conexiones al servidor automáticamente (usa un grupo de conexiones). No es necesario llamar al servidor. Conectar ya que el controlador se conecta automáticamente. No llame al servidor. Desconecte, ya que eso cierra todas las conexiones en el grupo de conexiones e interfiere con el uso eficiente de la conexión.
En lo que respecta a la gestión del ciclo de vida de la instancia de MongoServer, puede almacenarlo en una variable estática y usarlo durante el tiempo de vida de su proceso (y compartirlo en subprocesos, es seguro para los hilos). Alternativamente, puedes llamar a MongoServer.Create de nuevo cada vez que necesites obtener la instancia del servidor. Mientras continúe llamando a MongoServer.Create con la misma cadena de conexión, seguirá recibiendo la misma instancia de MongoServer.
Inyecte utilizando cualquier contenedor IOC (structuremap, Windsor, etc.) y mantenga su vida útil según lo solicite.
En la documentación oficial se indica que MongoServer
, MongoDatabase
y MongoCollection
son seguros para subprocesos, y que se supone que debe crear un solo MongoServer
para cada base de datos a la que se conecte.
Por lo tanto, MongoServer
, MongoDatabase
y MongoCollection
se pueden configurar de forma segura para que sean singletons. MongoServer
incluso ayudará a aplicar esto devolviendo la misma instancia de MongoDatabase
para llamadas sucesivas, y MongoDatabase
hará lo mismo para MongoCollection
s.
Es decir, su instancia de MongoServer
puede configurarse de manera segura para tener un estilo de vida único en su contenedor IoC, y también puede configurar la inyección para MongoDatabase
y tal vez incluso MongoCollection
.
Yo mismo uso esta estrategia con Windsor. Puede ver mi MongoInstaller
aquí: https://gist.github.com/2427676 . Esto permite que mis clases MongoInstaller
adelante y hagan esto:
public class SomeClass
{
public SomeClass(MongoCollection<Person> people)
{ ... }
}
Para tener una colección inyectada, agradable y lista para usar.