diff --git a/Dapper/SqlMapper.cs b/Dapper/SqlMapper.cs
index 8f3956cab..9c73b8a25 100644
--- a/Dapper/SqlMapper.cs
+++ b/Dapper/SqlMapper.cs
@@ -1157,7 +1157,7 @@ private static GridReader QueryMultipleImpl(this IDbConnection cnn, ref CommandD
cmd = command.SetupCommand(cnn, info.ParamReader);
reader = ExecuteReaderWithFlagsFallback(cmd, wasClosed, CommandBehavior.SequentialAccess);
- var result = new GridReader(cmd, reader, identity, command.Parameters as DynamicParameters, command.AddToCache);
+ var result = new GridReader(cmd, reader, identity, command.Parameters as IParameterCallbacks, command.AddToCache);
cmd = null; // now owned by result
wasClosed = false; // *if* the connection was closed and we got this far, then we now have a reader
// with the CloseConnection flag, so the reader will deal with the connection; we
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 2f91a3cca..b1e42ba41 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -38,6 +38,7 @@
+
diff --git a/tests/Dapper.Tests/Dapper.Tests.csproj b/tests/Dapper.Tests/Dapper.Tests.csproj
index 93b498618..e9eab6b88 100644
--- a/tests/Dapper.Tests/Dapper.Tests.csproj
+++ b/tests/Dapper.Tests/Dapper.Tests.csproj
@@ -32,6 +32,7 @@
+
diff --git a/tests/Dapper.Tests/FakeDbTests.Issue2179.cs b/tests/Dapper.Tests/FakeDbTests.Issue2179.cs
new file mode 100644
index 000000000..6000a17af
--- /dev/null
+++ b/tests/Dapper.Tests/FakeDbTests.Issue2179.cs
@@ -0,0 +1,37 @@
+#if !NET481
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using pengdows.crud.fakeDb;
+using Xunit;
+
+namespace Dapper.Tests;
+
+public sealed class FakeDbIssue2179Tests
+{
+ [Fact]
+ public void QueryMultipleInvokesCustomParameterCallbacks()
+ {
+ using var connection = new fakeDbConnection(new FakeDataStore());
+ connection.EnqueueReaderResult(new[] { new Dictionary { ["Value"] = 1 } });
+ connection.Open();
+ var parameters = new CallbackParameters();
+
+ using (var grid = connection.QueryMultiple("select 1", parameters))
+ {
+ Assert.Equal(1, grid.Read().Single());
+ }
+
+ Assert.Equal(1, parameters.CompletedCalls);
+ }
+
+ private sealed class CallbackParameters : SqlMapper.IParameterCallbacks
+ {
+ public int CompletedCalls { get; private set; }
+
+ void SqlMapper.IDynamicParameters.AddParameters(IDbCommand command, SqlMapper.Identity identity) { }
+
+ void SqlMapper.IParameterCallbacks.OnCompleted() => CompletedCalls++;
+ }
+}
+#endif