Example #1
0
        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);
        }