From c873a24ddb1612869375fa51144248dca02a6da9 Mon Sep 17 00:00:00 2001 From: Marc Gravell Date: Thu, 4 Aug 2011 07:14:59 +0100 Subject: [PATCH] FIX: work with non-public constructors --- Dapper/SqlMapper.cs | 2 +- Tests/Tests.cs | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/Dapper/SqlMapper.cs b/Dapper/SqlMapper.cs index cd78c199..6cba0ba0 100644 --- a/Dapper/SqlMapper.cs +++ b/Dapper/SqlMapper.cs @@ -1331,7 +1331,7 @@ IDataReader reader, int startBound = 0, int length = -1, bool returnNullIfFirstM il.BeginExceptionBlock(); // stack is empty - il.Emit(OpCodes.Newobj, typeof(T).GetConstructor(Type.EmptyTypes)); // stack is now [target] + il.Emit(OpCodes.Newobj, typeof(T).GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, Type.EmptyTypes, null)); // stack is now [target] bool first = true; var allDone = il.DefineLabel(); foreach (var item in setters) diff --git a/Tests/Tests.cs b/Tests/Tests.cs index 2d53477d..e74b05e4 100644 --- a/Tests/Tests.cs +++ b/Tests/Tests.cs @@ -1038,6 +1038,18 @@ Order by p.Id"; { public System.Data.Linq.Binary Value { get; set; } } - + + + class WithPrivateConstructor + { + public int Foo { get; set; } + private WithPrivateConstructor() { } + } + + public void TestWithNonPublicConstructor() + { + var output = connection.Query("select 1 as Foo").First(); + output.Foo.IsEqualTo(1); + } } }