diff --git a/readme.md b/readme.md index a7937fb..39d0ef7 100644 --- a/readme.md +++ b/readme.md @@ -161,7 +161,7 @@ internal static string BuildEtag(string timeStamp, string? suffix) return $"\"{AssemblyWriteTime}-{timeStamp}-{suffix}\""; } ``` -snippet source | anchor +snippet source | anchor @@ -330,38 +330,42 @@ app.UseDelta( By default, Delta uses `HttpContext.RequestServices` to discover the SqlConnection and SqlTransaction: - - + + ```cs -static (Type sqlConnection, Type transaction) FindConnectionType() +var sqlConnectionType = Type.GetType("Microsoft.Data.SqlClient.SqlConnection, Microsoft.Data.SqlClient"); +if (sqlConnectionType != null) { - var sqlConnection = Type.GetType("Microsoft.Data.SqlClient.SqlConnection, Microsoft.Data.SqlClient"); - if (sqlConnection != null) - { - var transaction = sqlConnection.Assembly.GetType("Microsoft.Data.SqlClient.SqlTransaction")!; - return (sqlConnection, transaction); - } - - var npgsqlConnection = Type.GetType("Npgsql.NpgsqlConnection, Npgsql"); - if (npgsqlConnection != null) - { - var transaction = npgsqlConnection.Assembly.GetType("Npgsql.NpgsqlTransaction")!; - return (npgsqlConnection, transaction); - } + connectionType = sqlConnectionType; + transactionType = sqlConnectionType.Assembly.GetType("Microsoft.Data.SqlClient.SqlTransaction")!; + return; +} - throw new("Could not find connection type. Tried Microsoft.Data.SqlClient.SqlConnection and Npgsql.NpgsqlTransaction"); +var npgConnectionType = Type.GetType("Npgsql.NpgsqlConnection, Npgsql"); +if (npgConnectionType != null) +{ + connectionType = npgConnectionType; + transactionType = npgConnectionType.Assembly.GetType("Npgsql.NpgsqlTransaction")!; + return; } +throw new("Could not find connection type. Tried Microsoft.Data.SqlClient.SqlConnection and Npgsql.NpgsqlTransaction"); +``` +snippet source | anchor + + + + +```cs static Connection DiscoverConnection(HttpContext httpContext) { - var (connectionType, transactionType) = FindConnectionType(); var provider = httpContext.RequestServices; var connection = (DbConnection) provider.GetRequiredService(connectionType); var transaction = (DbTransaction?) provider.GetService(transactionType); return new(connection, transaction); } ``` -snippet source | anchor +snippet source | anchor To use custom connection discovery: diff --git a/readme.source.md b/readme.source.md index 705cb25..9ddb035 100644 --- a/readme.source.md +++ b/readme.source.md @@ -188,6 +188,8 @@ snippet: ShouldExecute By default, Delta uses `HttpContext.RequestServices` to discover the SqlConnection and SqlTransaction: +snippet: DiscoverConnectionType + snippet: DiscoverConnection To use custom connection discovery: diff --git a/src/Delta/DeltaExtensions_ConnectionDiscovery.cs b/src/Delta/DeltaExtensions_ConnectionDiscovery.cs index 6c030ad..7863e51 100644 --- a/src/Delta/DeltaExtensions_ConnectionDiscovery.cs +++ b/src/Delta/DeltaExtensions_ConnectionDiscovery.cs @@ -2,30 +2,13 @@ namespace Delta; public static partial class DeltaExtensions { - #region DiscoverConnection - - static (Type sqlConnection, Type transaction) FindConnectionType() - { - var sqlConnection = Type.GetType("Microsoft.Data.SqlClient.SqlConnection, Microsoft.Data.SqlClient"); - if (sqlConnection != null) - { - var transaction = sqlConnection.Assembly.GetType("Microsoft.Data.SqlClient.SqlTransaction")!; - return (sqlConnection, transaction); - } + static Type connectionType; + static Type transactionType; - var npgsqlConnection = Type.GetType("Npgsql.NpgsqlConnection, Npgsql"); - if (npgsqlConnection != null) - { - var transaction = npgsqlConnection.Assembly.GetType("Npgsql.NpgsqlTransaction")!; - return (npgsqlConnection, transaction); - } - - throw new("Could not find connection type. Tried Microsoft.Data.SqlClient.SqlConnection and Npgsql.NpgsqlTransaction"); - } + #region DiscoverConnection static Connection DiscoverConnection(HttpContext httpContext) { - var (connectionType, transactionType) = FindConnectionType(); var provider = httpContext.RequestServices; var connection = (DbConnection) provider.GetRequiredService(connectionType); var transaction = (DbTransaction?) provider.GetService(transactionType); diff --git a/src/Delta/DeltaExtensions_Shared.cs b/src/Delta/DeltaExtensions_Shared.cs index 5f689c0..15922ff 100644 --- a/src/Delta/DeltaExtensions_Shared.cs +++ b/src/Delta/DeltaExtensions_Shared.cs @@ -41,6 +41,28 @@ static DeltaExtensions() AssemblyWriteTime = File.GetLastWriteTime(webAssemblyLocation).Ticks.ToString(); #endregion + + #region DiscoverConnectionType + + var sqlConnectionType = Type.GetType("Microsoft.Data.SqlClient.SqlConnection, Microsoft.Data.SqlClient"); + if (sqlConnectionType != null) + { + connectionType = sqlConnectionType; + transactionType = sqlConnectionType.Assembly.GetType("Microsoft.Data.SqlClient.SqlTransaction")!; + return; + } + + var npgConnectionType = Type.GetType("Npgsql.NpgsqlConnection, Npgsql"); + if (npgConnectionType != null) + { + connectionType = npgConnectionType; + transactionType = npgConnectionType.Assembly.GetType("Npgsql.NpgsqlTransaction")!; + return; + } + + throw new("Could not find connection type. Tried Microsoft.Data.SqlClient.SqlConnection and Npgsql.NpgsqlTransaction"); + + #endregion } internal static async Task HandleRequest(HttpContext context, ILogger logger, Func? suffix, Func> getTimeStamp, Func? shouldExecute, LogLevel level)