using System.Collections.Generic;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
public static void Main()
string My_Server_Connection = @"mongodb+srv://myDatabaseUser:D1fficultP%40ssw0rd@mongodb0.example.com/?authSource=admin&replicaSet=myRepl";
string My_Server_Connection2 = @"mongodb+srv://myDatabaseUser:D1fficultP%40ssw0rd@mongodb1.example.com/?authSource=admin&replicaSet=myRepl";
var serviceProvider = new ServiceCollection()
.AddSingleton<IMongoClientProvider>(new MongoClientProvider(1, My_Server_Connection))
.AddSingleton<IMongoClientProvider>(new MongoClientProvider(2, My_Server_Connection2))
.AddSingleton<MongoClientFactory>()
.AddTransient<DataStore1>()
.AddTransient<DataStore2>()
Console.WriteLine("Get Data Store 1");
var dataStore1 = serviceProvider.GetService<DataStore1>();
Console.WriteLine("Get Data Store 2");
var dataStore2 =serviceProvider.GetService<DataStore2>();
public interface IMongoClientProvider
public int Type { get; init; }
public IMongoClient GetMongoClient();
public class MongoClientProvider : IMongoClientProvider
public int Type { get; init; }
private readonly IMongoClient _client;
public MongoClientProvider(int type, string connectionString)
_client = new MongoClient(connectionString);
public IMongoClient GetMongoClient()
Console.WriteLine($"Con: {((MongoClient)_client).Settings.Server}");
public class MongoClientFactory
private readonly IEnumerable<IMongoClientProvider> _providers;
public MongoClientFactory(IEnumerable<IMongoClientProvider> providers)
public IMongoClient GetMongoClient(int type)
var provider = _providers.SingleOrDefault(x => x.Type == type);
throw new Exception("Unsupported type for provider.");
return provider.GetMongoClient();
private readonly IMongoDatabase database;
private readonly string databaseName = "DatabaseName1";
public DataStore1(MongoClientFactory factory)
var client = factory.GetMongoClient(1);
Console.WriteLine($"Data store 1 get MongoClient from: {{((MongoClient)_client).Settings.Server}}");
database = client.GetDatabase(databaseName);
private readonly IMongoDatabase database;
private readonly string databaseName = "DatabaseName2";
public DataStore2(MongoClientFactory factory)
var client = factory.GetMongoClient(2);
Console.WriteLine($"Data store 2 get MongoClient from: {{((MongoClient)_client).Settings.Server}}");
database = client.GetDatabase(databaseName);