using System; using System.Threading; using Microsoft.Extensions.DependencyInjection; using MongoDB.Driver; namespace DotNetCore.CAP.MongoDB.Test { public abstract class DatabaseTestHost : IDisposable { private string _connectionString; protected IServiceProvider Provider { get; private set; } protected IMongoClient MongoClient => Provider.GetService(); protected IMongoDatabase Database => MongoClient.GetDatabase(MongoDBOptions.DatabaseName); protected CapOptions CapOptions => Provider.GetService(); protected MongoDBOptions MongoDBOptions => Provider.GetService(); protected DatabaseTestHost() { CreateServiceCollection(); CreateDatabase(); } private void CreateDatabase() { Provider.GetService().InitializeAsync(CancellationToken.None).GetAwaiter().GetResult(); } protected virtual void AddService(ServiceCollection serviceCollection) { } private void CreateServiceCollection() { var services = new ServiceCollection(); services.AddOptions(); services.AddLogging(); _connectionString = ConnectionUtil.ConnectionString; services.AddSingleton(new MongoDBOptions() { DatabaseConnection = _connectionString }); services.AddSingleton(new CapOptions()); services.AddSingleton(x => new MongoClient(_connectionString)); services.AddSingleton(); AddService(services); Provider = services.BuildServiceProvider(); } public void Dispose() { MongoClient.DropDatabase(MongoDBOptions.DatabaseName); } } }