Пример #1
0
        // 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
            })
                                 );
        }