// This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { services.Configure <MorphicSettings>(Configuration.GetSection("MorphicSettings")); services.AddSingleton <MorphicSettings>(serviceProvider => serviceProvider.GetRequiredService <IOptions <MorphicSettings> >().Value); services.Configure <DatabaseSettings>(Configuration.GetSection("DatabaseSettings")); services.AddSingleton <DatabaseSettings>(serviceProvider => serviceProvider.GetRequiredService <IOptions <DatabaseSettings> >().Value); services.Configure <EmailSettings>(Configuration.GetSection("EmailSettings")); services.AddSingleton <EmailSettings>(serviceProvider => serviceProvider.GetRequiredService <IOptions <EmailSettings> >().Value); services.Configure <KeyStorageSettings>(Configuration.GetSection("KeyStorageSettings")); services.AddSingleton <KeyStorageSettings>(serviceProvider => serviceProvider.GetRequiredService <IOptions <KeyStorageSettings> >().Value); services.AddSingleton <KeyStorage>(serviceProvider => KeyStorage.CreateShared(serviceProvider.GetRequiredService <KeyStorageSettings>(), serviceProvider.GetRequiredService <ILogger <KeyStorage> >())); services.AddSingleton <Database>(); services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>(); services.AddSingleton <IRecaptcha, MockRecaptcha>(); services.AddSingleton <IBackgroundJobClient, MockBackgroundJobClient>(); services.AddSingleton <StripeSettings>(new StripeSettings() { WebhookSecret = "webhooksecret" }); services.AddSingleton <IPaymentProcessor, MockPaymentProcessor>(); services.AddSingleton <Plans>(new Plans( new Plan[] { new Plan() { Id = "testplan1", IsDefault = true, IsActive = true, MemberLimit = 5, Months = 1, Price = 500, Currency = "USD" }, new Plan() { Id = "testplan2", IsActive = true, MemberLimit = 10, Months = 1, Price = 1000, Currency = "USD" }, new Plan() { Id = "testplan3", IsActive = false, MemberLimit = 5, Months = 1, Price = 600, Currency = "USD" } } )); services.AddRouting(); services.AddEndpoints(); }
// This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { services.Configure <MorphicSettings>(Configuration.GetSection("MorphicSettings")); services.AddSingleton <MorphicSettings>(serviceProvider => serviceProvider.GetRequiredService <IOptions <MorphicSettings> >().Value); services.Configure <DatabaseSettings>(Configuration.GetSection("DatabaseSettings")); services.AddSingleton <DatabaseSettings>(serviceProvider => serviceProvider.GetRequiredService <IOptions <DatabaseSettings> >().Value); services.Configure <EmailSettings>(Configuration.GetSection("EmailSettings")); services.AddSingleton <EmailSettings>(serviceProvider => serviceProvider.GetRequiredService <IOptions <EmailSettings> >().Value); services.Configure <KeyStorageSettings>(Configuration.GetSection("KeyStorageSettings")); services.AddSingleton <KeyStorageSettings>(serviceProvider => serviceProvider.GetRequiredService <IOptions <KeyStorageSettings> >().Value); services.AddSingleton <KeyStorage>(serviceProvider => KeyStorage.CreateShared(serviceProvider.GetRequiredService <KeyStorageSettings>(), serviceProvider.GetRequiredService <ILogger <KeyStorage> >())); services.AddSingleton <Plans>(serviceProvider => Plans.FromJson(Path.Join(serviceProvider.GetRequiredService <IWebHostEnvironment>().ContentRootPath, "Billing", serviceProvider.GetRequiredService <StripeSettings>().Plans))); services.Configure <StripeSettings>(Configuration.GetSection("StripeSettings")); services.AddSingleton <StripeSettings>(serviceProvider => serviceProvider.GetRequiredService <IOptions <StripeSettings> >().Value); services.AddSingleton <IPaymentProcessor, StripePaymentProcessor>(); services.AddSingleton <Database>(); services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>(); services.AddSingleton <IRecaptcha, Recaptcha>(); services.AddSingleton <IBackgroundJobClient, BackgroundJobClient>(); services.AddRouting(); services.AddEndpoints(); var migrationOptions = new MongoMigrationOptions { Strategy = MongoMigrationStrategy.Migrate, BackupStrategy = MongoBackupStrategy.Collections }; services.AddHangfire(configuration => configuration .SetDataCompatibilityLevel(CompatibilityLevel.Version_170) .UseSimpleAssemblyNameTypeSerializer() .UseRecommendedSerializerSettings() .UseSerilogLogProvider() .UseFilter(new HangfireJobMetrics()) .UseMongoStorage(Configuration.GetSection("HangfireSettings")["ConnectionString"], // TODO Is there a better way than GetSection[]? new MongoStorageOptions { MigrationOptions = migrationOptions }) ); }