public static SeedBuilder AddDataAccess(this SeedBuilder builder)
        {
            builder.ConfigureServices(services =>
            {
                services.AddScoped <IDataMigrationManager, DataMigrationManager>();
                services.AddScoped <IModuleTenantEvents, AutoDataMigration>();
                services.AddScoped <IDataMigrator, DataMigrator>();

                services.TryAddDataProvider(name: "Microsoft SQLServer", provider: "SqlConnection");
                services.TryAddDataProvider(name: "MySql Database", provider: "MySql");

                services.AddSingleton <IStore>(sp =>
                {
                    return(new Store(sp));
                });

                services.AddScoped <IDbContext>(sp =>
                {
                    var typeConfigs = sp.GetServices <IEntityTypeConfigurationProvider>()
                                      .InvokeAsync(provider => provider.GetEntityTypeConfigurationsAsync(), null)
                                      .Result;
                    return(sp.GetService <IStore>()?.CreateDbContext(typeConfigs.ToArray()));
                });
            });

            return(builder);
        }
示例#2
0
        private static void AddPluginServices(SeedBuilder builder)
        {
            builder.ApplicationServices.AddPluginManagerHost();

            builder.ConfigureServices(services =>
            {
                services.AddPluginManager();
            });
        }
示例#3
0
        public static SeedBuilder AddCaching(this SeedBuilder builder)
        {
            builder.ConfigureServices(services =>
            {
                services.AddSingleton <ISignal, Signal>();
                services.AddSingleton <IMemoryCache, MemoryCache>();
            });

            return(builder);
        }
示例#4
0
        public static SeedBuilder AddDeferredTasks(this SeedBuilder builder)
        {
            builder.ConfigureServices(services =>
            {
                services.TryAddScoped <IDeferredTaskEngine, DeferredTaskEngine>();
                services.TryAddScoped <IDeferredTaskState, HttpContextTaskState>();
            });

            return(builder);
        }
        public static SeedBuilder AddBackgroundTasks(this SeedBuilder builder)
        {
            builder.ConfigureServices(services =>
            {
                services.TryAddSingleton <IBackgroundTaskService, BackgroundTaskService>();
                services.AddScoped <BackgroundTasksStarter>();
                services.AddScoped <IModuleTenantEvents>(sp => sp.GetRequiredService <BackgroundTasksStarter>());
            });

            return(builder);
        }
示例#6
0
        public static SeedBuilder AddTenantFeatures(this SeedBuilder builder, params string[] featureIds)
        {
            builder.ConfigureServices(services =>
            {
                foreach (var featureId in featureIds)
                {
                    services.AddTransient(sp => new EngineFeature(featureId, alwaysEnabled: true));
                }
            });

            return(builder);
        }
示例#7
0
        private static void AddAuthentication(SeedBuilder builder)
        {
            builder.ApplicationServices.AddAuthentication();

            builder.ConfigureServices(services =>
            {
                services.AddAuthentication();
                services.AddSingleton <IAuthenticationSchemeProvider, AuthenticationSchemeProvider>();
            })
            .Configure(app =>
            {
                app.UseAuthentication();
            });
        }
示例#8
0
        private static void AddDataProtection(SeedBuilder builder)
        {
            builder.ConfigureServices((services, serviceProvider) =>
            {
                var settings = serviceProvider.GetRequiredService <EngineSettings>();
                var options  = serviceProvider.GetRequiredService <IOptions <EngineOptions> >();

                var directory = Directory.CreateDirectory(Path.Combine(
                                                              options.Value.ApplicationDataPath,
                                                              options.Value.ContainerName,
                                                              settings.Name, "DataProtection-Keys"));

                services.Add(new ServiceCollection()
                             .AddDataProtection()
                             .PersistKeysToFileSystem(directory)
                             .SetApplicationName(settings.Name)
                             .Services);
            });
        }
示例#9
0
        private static void AddAntiForgery(SeedBuilder builder)
        {
            //builder.ApplicationServices.AddAntiforgery();

            builder.ConfigureServices((services, serviceProvider) =>
            {
                var settings = serviceProvider.GetRequiredService <EngineSettings>();

                var tenantName   = settings.Name;
                var tenantPrefix = "/" + settings.RequestUrlPrefix;

                services.AddAntiforgery(options =>
                {
                    options.HeaderName  = "X-XSRF-TOKEN";
                    options.Cookie.Name = "seedforgery_" + tenantName;
                    options.Cookie.Path = tenantPrefix;
                });
            });
        }
示例#10
0
 private static void AddTenantCookie(SeedBuilder builder)
 {
     builder.ConfigureServices((service, serviceProvider) =>
     {
     });
 }