public Repository(MongoDbConfiger configer) { BsonDefaults.GuidRepresentation = GuidRepresentation.Standard; ConventionRegistry.Register("IgnoreExtraElements", new ConventionPack { new IgnoreExtraElementsConvention(true) }, type => true); MongoClient = new MongoPool().GetClient(configer); MongoDatabase = MongoClient.GetDatabase(configer.Database); }
public IMongoClient GetClient(MongoDbConfiger configer) { var connStr = configer.GetConnectionString(); lock (LockObj) { if (Clients.ContainsKey(connStr)) { return(Clients[connStr]); } } lock (LockObj) { if (Clients.ContainsKey(connStr)) { return(Clients[connStr]); } var settings = new MongoClientSettings { Servers = configer.Hosts.Select(p => { var strs = p.Split(':'); var ip = strs[0]; var port = string.IsNullOrWhiteSpace(strs[1]) ? 27017 : Convert.ToInt32(strs[1]); return(new MongoServerAddress(ip, port)); }), ReadPreference = configer.ReadPreference != null ? new ReadPreference(ConvertReadPreference(configer.ReadPreference.Value)) : new ReadPreference(ReadPreferenceMode.Primary), Credential = MongoCredential.CreateCredential(configer.Database, configer.UserName, configer.Password), ConnectTimeout = TimeSpan.FromSeconds(300), SocketTimeout = TimeSpan.FromSeconds(300), MaxConnectionLifeTime = TimeSpan.FromSeconds(300), MinConnectionPoolSize = 100, ConnectionMode = ConnectionMode.Automatic }; return(Clients.GetOrAdd(connStr, key => new MongoClient(settings))); } }