/// <summary> /// Adds SqlConnection (as IDbConnection) to your Autofac Container /// </summary> /// <param name="container">Your Autofac Container Builder</param> /// <param name="config">Application configuration</param> /// <param name="serviceName">Cloud Foundry service name binding</param> /// <returns>the RegistrationBuilder for (optional) additional configuration</returns> public static IRegistrationBuilder <object, SimpleActivatorData, SingleRegistrationStyle> RegisterSqlServerConnection(this ContainerBuilder container, IConfiguration config, string serviceName = null) { if (container == null) { throw new ArgumentNullException(nameof(container)); } if (config == null) { throw new ArgumentNullException(nameof(config)); } Type sqlServerConnection = ConnectorHelpers.FindType(sqlServerAssemblies, sqlServerTypeNames); if (sqlServerConnection == null) { throw new ConnectorException("Unable to find System.Data.SqlClient.SqlConnection, are you missing a System.Data.SqlClient reference?"); } SqlServerServiceInfo info; if (serviceName == null) { info = config.GetSingletonServiceInfo <SqlServerServiceInfo>(); } else { info = config.GetRequiredServiceInfo <SqlServerServiceInfo>(serviceName); } var sqlServerConfig = new SqlServerProviderConnectorOptions(config); var factory = new SqlServerProviderConnectorFactory(info, sqlServerConfig, sqlServerConnection); return(container.Register(c => factory.Create(null)).As <IDbConnection>()); }
public void ConnectionString_Overridden_By_CloudFoundryConfig() { // arrange // simulate an appsettings file var appsettings = new Dictionary <string, string>() { ["sqlserver:credentials:ConnectionString"] = "Server=fake;Database=test;Uid=steeltoe;Pwd=password;" }; // add environment variables as Cloud Foundry would Environment.SetEnvironmentVariable("VCAP_APPLICATION", TestHelpers.VCAP_APPLICATION); Environment.SetEnvironmentVariable("VCAP_SERVICES", SqlServerTestHelpers.SingleServerVCAP); // add settings to config var configurationBuilder = new ConfigurationBuilder(); configurationBuilder.AddInMemoryCollection(appsettings); configurationBuilder.AddEnvironmentVariables(); configurationBuilder.AddCloudFoundry(); var config = configurationBuilder.Build(); // act var sconfig = new SqlServerProviderConnectorOptions(config); // assert Assert.NotEqual(appsettings["sqlserver:credentials:ConnectionString"], sconfig.ToString()); }
public SqlServerDbContextConnectorFactory(SqlServerServiceInfo info, SqlServerProviderConnectorOptions config, Type dbContextType) : base(info, config, dbContextType) { if (dbContextType == null) { throw new ArgumentNullException(nameof(dbContextType)); } }
public void Constructor_ThrowsIfConfigNull() { SqlServerProviderConnectorOptions config = null; var ex = Assert.Throws <ArgumentNullException>(() => new SqlServerProviderConnectorFactory(null, config, typeof(SqlConnection))); Assert.Contains(nameof(config), ex.Message); }
private static void DoAdd(IServiceCollection services, IConfiguration config, SqlServerServiceInfo info, Type dbContextType, ServiceLifetime contextLifetime) { var sqlServerConfig = new SqlServerProviderConnectorOptions(config); var factory = new SqlServerDbContextConnectorFactory(info, sqlServerConfig, dbContextType); services.Add(new ServiceDescriptor(dbContextType, factory.Create, contextLifetime)); }
public static void RegisterSqlServerConnection(IContainer container, IConfigurationRoot config) { SqlServerProviderConnectorOptions SqlServerConfig = new SqlServerProviderConnectorOptions(config); SqlServerServiceInfo info = config.GetSingletonServiceInfo <SqlServerServiceInfo>(); SqlServerProviderConnectorFactory factory = new SqlServerProviderConnectorFactory(info, SqlServerConfig, typeof(SqlConnection)); container.Inject <IBloggingContext>(new BloggingContext((SqlConnection)factory.Create(null))); }
public void Constructor_ThrowsIfTypeNull() { var config = new SqlServerProviderConnectorOptions(); SqlServerServiceInfo si = null; Type dbContextType = null; var ex = Assert.Throws <ArgumentNullException>(() => new SqlServerDbContextConnectorFactory(si, config, dbContextType)); Assert.Contains(nameof(dbContextType), ex.Message); }
public void Create_ThrowsIfNoValidConstructorFound() { var config = new SqlServerProviderConnectorOptions(); SqlServerServiceInfo si = null; var dbContextType = typeof(BadSqlServerDbContext); var ex = Assert.Throws <ConnectorException>(() => new SqlServerDbContextConnectorFactory(si, config, dbContextType).Create(null)); Assert.Contains("BadSqlServerDbContext", ex.Message); }
private static void CopyBoundSqlConnection( IWebConfigWriter webConfig, SqlServerServiceInfo sqlServiceInfo, SqlServerProviderConnectorOptions sqlConnectorOptions) { SqlServerProviderConnectorFactory sqlConnectorFactory = new SqlServerProviderConnectorFactory( sqlServiceInfo, sqlConnectorOptions, typeof(SqlConnection)); webConfig.SetConnectionString(sqlServiceInfo.Id, sqlConnectorFactory.CreateConnectionString()); }
private static void DoAdd(IServiceCollection services, IConfiguration config, SqlServerServiceInfo info, Type dbContextType, ServiceLifetime contextLifetime) { var sqlServerConfig = new SqlServerProviderConnectorOptions(config); var factory = new SqlServerDbContextConnectorFactory(info, sqlServerConfig, dbContextType); services.Add(new ServiceDescriptor(dbContextType, factory.Create, contextLifetime)); var healthFactory = new SqlServerProviderConnectorFactory(info, sqlServerConfig, SqlServerTypeLocator.SqlConnection); services.Add(new ServiceDescriptor(typeof(IHealthContributor), ctx => new RelationalDbHealthContributor((IDbConnection)healthFactory.Create(ctx), ctx.GetService <ILogger <RelationalDbHealthContributor> >()), contextLifetime)); }
private static string GetConnection(IConfiguration config, string serviceName = null) { var info = string.IsNullOrEmpty(serviceName) ? config.GetSingletonServiceInfo <SqlServerServiceInfo>() : config.GetRequiredServiceInfo <SqlServerServiceInfo>(serviceName); var sqlServerConfig = new SqlServerProviderConnectorOptions(config); var factory = new SqlServerProviderConnectorFactory(info, sqlServerConfig, null); return(factory.CreateConnectionString()); }
/// <summary> /// MsSql连接字符串构建 /// </summary> /// <param name="config"></param> /// <param name="serviceName"></param> /// <returns></returns> public static string BuildeSqlServerConnectionString(this IConfiguration config, string serviceName = null) { SqlServerServiceInfo info = string.IsNullOrEmpty(serviceName) ? config.GetSingletonServiceInfo <SqlServerServiceInfo>() : config.GetRequiredServiceInfo <SqlServerServiceInfo>(serviceName); SqlServerProviderConnectorOptions sqlServerConfig = new SqlServerProviderConnectorOptions(config); SqlServerProviderConnectorFactory factory = new SqlServerProviderConnectorFactory(info, sqlServerConfig, null); var dbConnectionString = factory.CreateConnectionString(); return(factory.CreateConnectionString()); }
public void CopyBoundSqlInstancesToWebConfig(IWebConfigWriter webConfig) { if (webConfig == null) { throw new ArgumentNullException(nameof(webConfig), "The web config writer is required"); } SqlServerProviderConnectorOptions sqlConnectorOptions = new SqlServerProviderConnectorOptions(_config); foreach (SqlServerServiceInfo sqlServiceInfo in _config.GetServiceInfos <SqlServerServiceInfo>()) { CopyBoundSqlConnection(webConfig, sqlServiceInfo, sqlConnectorOptions); } }
public static void RegisterSqlServerConnection(IContainer container, IConfigurationRoot config) { SqlServerProviderConnectorOptions SqlServerConfig = new SqlServerProviderConnectorOptions(config); SqlServerServiceInfo info1 = config.GetRequiredServiceInfo <SqlServerServiceInfo>("mySqlServerService1"); // config.GetSingletonServiceInfo<SqlServerServiceInfo>(); SqlServerProviderConnectorFactory factory1 = new SqlServerProviderConnectorFactory(info1, SqlServerConfig, typeof(SqlConnection)); container.Inject <IBloggingContext>(new BloggingContext((SqlConnection)factory1.Create(null))); SqlServerServiceInfo info2 = config.GetRequiredServiceInfo <SqlServerServiceInfo>("mySqlServerService2"); // config.GetSingletonServiceInfo<SqlServerServiceInfo>(); SqlServerProviderConnectorFactory factory2 = new SqlServerProviderConnectorFactory(info2, SqlServerConfig, typeof(SqlConnection)); container.Inject <IVloggingContext>(new VloggingContext((SqlConnection)factory2.Create(null))); }
public void ConnectionString_Returned_AsConfigured() { var appsettings = new Dictionary <string, string>() { ["sqlserver:credentials:ConnectionString"] = "Server=fake;Database=test;Uid=steeltoe;Pwd=password;" }; var configurationBuilder = new ConfigurationBuilder(); configurationBuilder.AddInMemoryCollection(appsettings); var config = configurationBuilder.Build(); var sconfig = new SqlServerProviderConnectorOptions(config); Assert.Equal(appsettings["sqlserver:credentials:ConnectionString"], sconfig.ToString()); }
public void Create_ReturnsSqlConnection() { SqlServerProviderConnectorOptions config = new SqlServerProviderConnectorOptions() { Server = "servername", Password = "******", Username = "******", Database = "database" }; SqlServerServiceInfo si = new SqlServerServiceInfo("MyId", "jdbc:sqlserver://servername:1433;databaseName=de5aa3a747c134b3d8780f8cc80be519e", "user", "pass"); var factory = new SqlServerProviderConnectorFactory(si, config, typeof(SqlConnection)); var connection = factory.Create(null); Assert.NotNull(connection); }
public static IHealthContributor GetSqlServerContributor(IConfiguration configuration, ILogger <SkynetCloudRelationalHealthContributor> logger = null) { if (configuration == null) { throw new ArgumentNullException(nameof(configuration)); } var info = configuration.GetSingletonServiceInfo <SqlServerServiceInfo>(); Type sqlServerConnection = SqlServerTypeLocator.SqlConnection; var sqlServerConfig = new SqlServerProviderConnectorOptions(configuration); var factory = new SqlServerProviderConnectorFactory(info, sqlServerConfig, sqlServerConnection); var connection = factory.Create(null) as IDbConnection; return(new SkynetCloudRelationalHealthContributor(connection, logger)); }
public void Sql_Is_Connected_Returns_Up_Status() { var implementationType = SqlServerTypeLocator.SqlConnection; var sqlConfig = new SqlServerProviderConnectorOptions() { Timeout = 1, ConnectionString = "Server=(localdb)\\MSSQLLocalDB;Integrated Security=true" }; var sInfo = new SqlServerServiceInfo("MyId", string.Empty); var logrFactory = new LoggerFactory(); var connFactory = new SqlServerProviderConnectorFactory(sInfo, sqlConfig, implementationType); var h = new RelationalDbHealthContributor((IDbConnection)connFactory.Create(null), logrFactory.CreateLogger <RelationalDbHealthContributor>()); var status = h.Health(); Assert.Equal(HealthStatus.UP, status.Status); }
public void Sql_Is_Connected_Returns_Up_Status() { // arrange Type implementationType = SqlServerTypeLocator.SqlConnection; var sqlConfig = new SqlServerProviderConnectorOptions(); var sInfo = new SqlServerServiceInfo("MyId", "jdbc:sqlserver://localhost:1433;databaseName=master", "steeltoe", "steeltoe"); var logrFactory = new LoggerFactory(); var connFactory = new SqlServerProviderConnectorFactory(sInfo, sqlConfig, implementationType); var h = new RelationalHealthContributor((IDbConnection)connFactory.Create(null), logrFactory.CreateLogger <RelationalHealthContributor>()); // act var status = h.Health(); // assert Assert.Equal(HealthStatus.UP, status.Status); }
public void Sql_Not_Connected_Returns_Down_Status() { var implementationType = SqlServerTypeLocator.SqlConnection; var sqlConfig = new SqlServerProviderConnectorOptions() { Timeout = 1 }; var sInfo = new SqlServerServiceInfo("MyId", "jdbc:sqlserver://localhost:1433/databaseName=invalidDatabaseName", "Dd6O1BPXUHdrmzbP", "7E1LxXnlH2hhlPVt"); var logrFactory = new LoggerFactory(); var connFactory = new SqlServerProviderConnectorFactory(sInfo, sqlConfig, implementationType); var h = new RelationalDbHealthContributor((IDbConnection)connFactory.Create(null), logrFactory.CreateLogger <RelationalDbHealthContributor>()); var status = h.Health(); Assert.Equal(HealthStatus.DOWN, status.Status); Assert.Contains(status.Details.Keys, k => k == "error"); }
private string DbConnectionString() { // The Steeltoe Microsoft SQL Server connector expects a `database` key in the service instance // credentials blob, which is not provided by our service broker, so we have to do a little bit // of extra work here to intercept the automagically discovered database connection string and // append it with our desired database name. var serviceInfo = Configuration.GetSingletonServiceInfo <SqlServerServiceInfo>(); var connectionOptions = new SqlServerProviderConnectorOptions(Configuration); var sqlProviderFactory = new SqlServerProviderConnectorFactory(serviceInfo, connectionOptions, null); var connection = sqlProviderFactory.CreateConnectionString(); if (!connection.Contains("Initial Catalog=")) { // TODO: Allow database name to be overridden from the environment? connection += "Initial Catalog=EFDemoDB;"; } return(connection); }
private static string GetConnection(IConfiguration config, string serviceName = null) { SqlServerServiceInfo info = null; if (string.IsNullOrEmpty(serviceName)) { info = config.GetSingletonServiceInfo <SqlServerServiceInfo>(); } else { info = config.GetRequiredServiceInfo <SqlServerServiceInfo>(serviceName); } SqlServerProviderConnectorOptions sqlServerConfig = new SqlServerProviderConnectorOptions(config); SqlServerProviderConnectorFactory factory = new SqlServerProviderConnectorFactory(info, sqlServerConfig, null); return(factory.CreateConnectionString()); }
public void CloudFoundryConfig_Found_By_Name() { Environment.SetEnvironmentVariable("VCAP_APPLICATION", TestHelpers.VCAP_APPLICATION); Environment.SetEnvironmentVariable("VCAP_SERVICES", SqlServerTestHelpers.SingleServerVCAPNoTag); // add settings to config var configurationBuilder = new ConfigurationBuilder(); configurationBuilder.AddEnvironmentVariables(); configurationBuilder.AddCloudFoundry(); var config = configurationBuilder.Build(); var sconfig = new SqlServerProviderConnectorOptions(config); Assert.NotEqual("192.168.0.80", sconfig.Server); Assert.NotEqual("de5aa3a747c134b3d8780f8cc80be519e", sconfig.Database); Assert.NotEqual("uf33b2b30783a4087948c30f6c3b0c90f", sconfig.Username); Assert.NotEqual("Pefbb929c1e0945b5bab5b8f0d110c503", sconfig.Password); }
public void Create_ReturnsDbContext() { var config = new SqlServerProviderConnectorOptions() { Server = "localhost", Port = 1433, Password = "******", Username = "******", Database = "database" }; var si = new SqlServerServiceInfo("MyId", "SqlServer://192.168.0.90:1433/cf_b4f8d2fa_a3ea_4e3a_a0e8_2cd040790355", "Dd6O1BPXUHdrmzbP", "7E1LxXnlH2hhlPVt"); var factory = new SqlServerDbContextConnectorFactory(si, config, typeof(GoodSqlServerDbContext)); var context = factory.Create(null); Assert.NotNull(context); var gcontext = context as GoodSqlServerDbContext; Assert.NotNull(gcontext); }
/// <summary> /// Add your SqlServer-based DbContext to the ContainerBuilder /// </summary> /// <typeparam name="TContext">Your DbContext</typeparam> /// <param name="container">Autofac <see cref="ContainerBuilder" /></param> /// <param name="config">Your app config</param> /// <param name="serviceName">Name of service instance</param> /// <returns><see cref="IRegistrationBuilder{TLimit, TActivatorData, TRegistrationStyle}"/></returns> public static IRegistrationBuilder <object, SimpleActivatorData, SingleRegistrationStyle> RegisterDbContext <TContext>(this ContainerBuilder container, IConfiguration config, string serviceName = null) { if (container == null) { throw new ArgumentNullException(nameof(container)); } if (config == null) { throw new ArgumentNullException(nameof(config)); } SqlServerServiceInfo info = serviceName == null ? config.GetSingletonServiceInfo <SqlServerServiceInfo>() : config.GetRequiredServiceInfo <SqlServerServiceInfo>(serviceName); var sqlServerConfig = new SqlServerProviderConnectorOptions(config); var factory = new SqlServerProviderConnectorFactory(info, sqlServerConfig, typeof(TContext)); return(container.Register(c => factory.Create(null)).As <TContext>()); }
/// <summary> /// Adds SqlConnection (as IDbConnection and SqlConnection) to your Autofac Container /// </summary> /// <param name="container">Your Autofac Container Builder</param> /// <param name="config">Application configuration</param> /// <param name="serviceName">Cloud Foundry service name binding</param> /// <returns>the RegistrationBuilder for (optional) additional configuration</returns> public static IRegistrationBuilder <object, SimpleActivatorData, SingleRegistrationStyle> RegisterSqlServerConnection(this ContainerBuilder container, IConfiguration config, string serviceName = null) { if (container == null) { throw new ArgumentNullException(nameof(container)); } if (config == null) { throw new ArgumentNullException(nameof(config)); } SqlServerServiceInfo info = serviceName == null ? config.GetSingletonServiceInfo <SqlServerServiceInfo>() : config.GetRequiredServiceInfo <SqlServerServiceInfo>(serviceName); Type sqlServerConnection = SqlServerTypeLocator.SqlConnection; var sqlServerConfig = new SqlServerProviderConnectorOptions(config); var factory = new SqlServerProviderConnectorFactory(info, sqlServerConfig, sqlServerConnection); container.RegisterType <RelationalHealthContributor>().As <IHealthContributor>(); return(container.Register(c => factory.Create(null)).As(typeof(IDbConnection), sqlServerConnection)); }
public void Constructor_BindsValues() { var appsettings = new Dictionary <string, string>() { ["sqlserver:credentials:uid"] = "username", ["sqlserver:credentials:uri"] = "jdbc:sqlserver://servername:1433;databaseName=de5aa3a747c134b3d8780f8cc80be519e", ["sqlserver:credentials:db"] = "de5aa3a747c134b3d8780f8cc80be519e", ["sqlserver:credentials:pw"] = "password" }; var configurationBuilder = new ConfigurationBuilder(); configurationBuilder.AddInMemoryCollection(appsettings); var config = configurationBuilder.Build(); var sconfig = new SqlServerProviderConnectorOptions(config); Assert.Equal("servername", sconfig.Server); Assert.Equal(1433, sconfig.Port); Assert.Equal("password", sconfig.Password); Assert.Equal("username", sconfig.Username); Assert.Null(sconfig.ConnectionString); }