public MongoDBFixture() { var rng = new Random(); DatabaseName = $"MongoDBFixture_{rng.Next(int.MaxValue):X}"; // docker run -it --rm --name mongodb -p 27027:27017 mongo:3.6.0-jessie ConnectionStringSettings = new ConnectionStringSettings { Name = DatabaseName, ConnectionString = $"mongodb://localhost:27027/{DatabaseName}?maxpoolsize=1000" }; #if NET452 var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); var configMap = new ExeConfigurationFileMap() { ExeConfigFilename = config.FilePath }; config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None); config.ConnectionStrings.ConnectionStrings.Remove(ConnectionStringSettings.Name); config.ConnectionStrings.ConnectionStrings.Add(ConnectionStringSettings); config.Save(ConfigurationSaveMode.Full, true); ConfigurationManager.RefreshSection(config.ConnectionStrings.SectionInformation.SectionName); #endif #if NETCOREAPP2_0 ConfigurationManager.ConnectionStrings[ConnectionStringSettings.Name] = ConnectionStringSettings; #endif Database = WaitForMongoDB(ConnectionStringSettings, DatabaseName); var subscriptionTrackingOptions = new MongoDBSubscriptionTrackingOptions(Database) { DiagnosticService = DiagnosticService }; SubscriptionTrackingService = new MongoDBSubscriptionTrackingService(subscriptionTrackingOptions); var messageQueueingOptions = new MongoDBMessageQueueingOptions(Database) { DiagnosticService = DiagnosticService }; MessageQueueingService = new MongoDBMessageQueueingService(messageQueueingOptions); var journalOptions = new MongoDBMessageJournalOptions(Database) { DiagnosticService = DiagnosticService }; MessageJournal = new MongoDBMessageJournal(journalOptions); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new Info { Title = "Billing API", Version = "v1" }); }); var billingConnectionString = Configuration.GetConnectionString("billingDB"); var journalingConnectionString = Configuration.GetConnectionString("journalingDB"); if (Configuration.GetValue <bool>("UseMongo2Go")) { var runner = MongoDbRunner.StartForDebugging(); services.AddSingleton(runner); billingConnectionString = runner.ConnectionString + "billing"; journalingConnectionString = runner.ConnectionString + "journaling"; } var billingDb = OpenDatabaseConnection(billingConnectionString); var journalDb = OpenDatabaseConnection(journalingConnectionString); var messageJournal = new MongoDBMessageJournal( new MongoDBMessageJournalOptions(journalDb)); services.AddSingleton(billingDb); services.AddSingleton <IInvoiceRepository, MongoInvoiceRepository>(); services.AddSingleton <IJournalingUpdateService, JournalingUpdateService>(); services.AddSingleton <IJournalConsumerProgressTracker, MongoJournalConsumerProgressTracker>(); services.AddSingleton <IMessageNamingService, DefaultMessageNamingService>(); services.AddSingleton <ISerializationService, DefaultSerializationService>(); services.AddSingleton <IHostedService, JournalingManagerService>(); services.AddSingleton <IMessageJournal>(sp => messageJournal); }