MongoClient是连接MongoDB数据库的中间件,在使用MongoClient类之前要从NuGet里面安装MongoDB.Bson、MongoDB.Driver、MongoDB.Driver.Core 三个包后才能使用完整的功能。
和上一篇文章要写的东西基本上差不多。自己封装的MongoDBClient代码量很少,基本原理就是在MongoClient的基础上封装了一层,使用xml配置里的ServerConfig.MongoConnectionString去New了一个MongoClient,然后把ip地址和端口端口构造函数就可以了。
要强调的一点是,单例实例化的过程中考虑到了多线程并发的情况,所以使用了双重检验锁这里判断两次的目的主要是:线程1和线程2同时进入外层的==null逻辑,线程2跑的比线程1块很多,线程2执行了lock(lock_obj),然后走完了初始化,完成后离开了lock块,然后解锁lock_obj对象;线程1才走到判断lock_obj有没有被锁上,这时候线程2结果了,线程1判断应该是没有锁上,会锁上lock_obj,进入lock中的代码块,如果这时候不加m_CurrClient==null,导致的结果 是会 初始化两次m_CurrClient。
贴出来代码:
using MongoDB.Driver; using System; using System.Collections.Generic; using System.Text; namespace Servers.Common { class MongoDBClient { private static object lock_obj = new object(); /// <summary> /// 中间件的客户端 /// </summary> private static MongoClient m_CurrClient = null; public static MongoClient CurrClient { get { if (null == lock_obj) { lock (lock_obj) { if (null == lock_obj) { m_CurrClient = new MongoClient(ServerConfig.MongoConnectionString); } } } return m_CurrClient; } } } }