コード例 #1
0
        private static void AddStaticFiles(SeedBuilder builder)
        {
            builder.Configure((app, routes, serviceProvider) =>
            {
                var env = serviceProvider.GetRequiredService <IHostingEnvironment>();

                IFileProvider fileProvider;
                // 开发环境下需要直接读取模块目录下的文件
                if (env.IsDevelopment())
                {
                    var fileProviders = new List <IFileProvider>
                    {
                        new ModuleProjectStaticFileProvider(env),
                        new ModuleEmbeddedStaticFileProvider(env)
                    };
                    fileProvider = new CompositeFileProvider(fileProviders);
                }
                else
                {
                    fileProvider = new ModuleEmbeddedStaticFileProvider(env);
                }

                app.UseStaticFiles(new StaticFileOptions
                {
                    RequestPath  = "",
                    FileProvider = fileProvider
                });
            });
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        public static SeedBuilder AddSetupFeatures(this SeedBuilder builder, params string[] featureIds)
        {
            foreach (var featureId in featureIds)
            {
                builder.ApplicationServices.AddTransient(sp => new EngineFeature(featureId));
            }

            return(builder);
        }
コード例 #4
0
        public static SeedBuilder AddGlobalFeatures(this SeedBuilder builder, params string[] featureIds)
        {
            foreach (var featureId in featureIds)
            {
                builder.ApplicationServices.AddTransient(sp => new EngineFeature(featureId, alwaysEnabled: true));
            }

            return(builder);
        }
コード例 #5
0
        private static void AddPluginServices(SeedBuilder builder)
        {
            builder.ApplicationServices.AddPluginManagerHost();

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

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

            return(builder);
        }
コード例 #8
0
        public static SeedBuilder AddSitesFolder(this SeedBuilder builder)
        {
            var services = builder.ApplicationServices;

            services.AddSingleton <IEngineSettingsConfigurationProvider, EngineSettingsConfigurationProvider>();
            services.AddSingleton <IEngineSettingsManager, EngineSettingsManager>();
            services.AddTransient <IConfigureOptions <EngineOptions>, EngineOptionsSetup>();

            return(builder);
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        public static SeedBuilder WithTenants(this SeedBuilder builder)
        {
            var services = builder.ApplicationServices;

            services.AddSingleton <IEngineSettingsConfigurationProvider, EngineSettingsConfigurationProvider>();
            services.AddScoped <IEngineDescriptorManager, FileEngineDescriptorManager>();
            services.AddSingleton <IEngineSettingsManager, EngineSettingsManager>();
            services.AddTransient <IConfigureOptions <EngineOptions>, EngineOptionsSetup>();
            services.AddScoped <EngineSettingsWithTenants>();

            return(builder);
        }
コード例 #11
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);
        }
コード例 #12
0
        public static SeedBuilder AddEngineStorage(this SeedBuilder builder)
        {
            builder.AddSitesFolder()
            .ConfigureServices(services =>
            {
                services.AddScoped <IEngineDescriptorManager, EngineDescriptorManager>();
                services.AddScoped <IEngineStateManager, EngineStateManager>();
                services.AddScoped <IEngineFeaturesManager, EngineFeaturesManager>();
                services.AddScoped <IEngineDescriptorFeaturesManager, EngineDescriptorFeaturesManager>();
            });

            return(builder);
        }
コード例 #13
0
        private static void AddAuthentication(SeedBuilder builder)
        {
            builder.ApplicationServices.AddAuthentication();

            builder.ConfigureServices(services =>
            {
                services.AddAuthentication();
                services.AddSingleton <IAuthenticationSchemeProvider, AuthenticationSchemeProvider>();
            })
            .Configure(app =>
            {
                app.UseAuthentication();
            });
        }
コード例 #14
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);
            });
        }
コード例 #15
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;
                });
            });
        }
コード例 #16
0
        public static SeedBuilder AddSeed(this IServiceCollection services)
        {
            var builder = services
                          .LastOrDefault(d => d.ServiceType == typeof(SeedBuilder))?
                          .ImplementationInstance as SeedBuilder;

            if (builder == null)
            {
                builder = new SeedBuilder(services);
                services.AddSingleton(builder);

                AddDefaultServices(services);
                AddEngineServices(services);
                AddPluginServices(builder);
                AddStaticFiles(builder);
                AddAntiForgery(builder);
                AddAuthentication(builder);
                AddDataProtection(builder);

                services.AddSingleton(services);
            }

            return(builder);
        }
コード例 #17
0
 public static SeedBuilder AddMvc(this SeedBuilder builder)
 {
     return(builder.RegisterStartup <Startup>());
 }
コード例 #18
0
 private static void AddTenantCookie(SeedBuilder builder)
 {
     builder.ConfigureServices((service, serviceProvider) =>
     {
     });
 }