private async Task <FeatureFlagsSessionManager> CreateSut() { var sqlSessionManagerSettings = new SQLServerSessionManagerSettings { ConnectionString = databaseFixture.ConnectionString }; var featureFlagsSettings = new FeatureFlagsSettings( featureFlagAssemblies: new[] { typeof(FeatureFlagsSessionManagerTests).Assembly } ) { ConnectionString = databaseFixture.ConnectionString, InitializationConnectionString = databaseFixture.ConnectionString, SqlSessionManagerSettings = sqlSessionManagerSettings, }; var sut = new FeatureFlagsSessionManager( featureFlagsSettings: featureFlagsSettings ); await sqlSessionManagerSettings.CreateDatabaseTableAsync( featureFlagsSettings.InitializationConnectionString ); return(sut); }
public void ConfigureServices(IServiceCollection services) { var featureFlagsConnectionString = configuration.GetConnectionString("featureFlags"); var featureFlagsInitializationConnectionString = configuration.GetConnectionString("featureFlagsInitialization"); var sqlSessionManagerSettings = new SQLServerSessionManagerSettings { FeatureSchemaName = "features", }; services.AddRimDevFeatureFlags( configuration, new[] { typeof(Startup).Assembly }, connectionString: featureFlagsConnectionString, initializationConnectionString: featureFlagsInitializationConnectionString, sqlSessionManagerSettings: sqlSessionManagerSettings ); // IFeatureManagerSnapshot should always be scoped / per-request lifetime services.AddScoped <IFeatureManagerSnapshot>(serviceProvider => { var featureFlagSessionManager = serviceProvider.GetRequiredService <FeatureFlagsSessionManager>(); var featureFlagsSettings = serviceProvider.GetRequiredService <FeatureFlagsSettings>(); return(new LussatiteLazyCacheFeatureManager( featureFlagsSettings.FeatureFlagTypes.Select(x => x.Name).ToList(), new [] { // in other use cases, you might list multiple ISessionManager objects to have layers featureFlagSessionManager })); }); services.AddRimDevFeatureFlagsUI(); }