Skip to content

Commit a541b08

Browse files
committed
CSHARP-3985: POC with configuration objects belonging to a serialization domain instead of adding serialization domain argument to hundreds of methods.
1 parent acd8a64 commit a541b08

File tree

250 files changed

+1429
-2522
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

250 files changed

+1429
-2522
lines changed

src/MongoDB.Bson/BsonDefaults.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,17 @@ public static class BsonDefaults
3030
/// </summary>
3131
public static IBsonSerializer DynamicArraySerializer
3232
{
33-
get => BsonSerializer.DefaultSerializationDomain.BsonDefaults.DynamicArraySerializer;
34-
set => BsonSerializer.DefaultSerializationDomain.BsonDefaults.DynamicArraySerializer = value;
33+
get => BsonSerializationDomain.Default.BsonDefaults.DynamicArraySerializer;
34+
set => BsonSerializationDomain.Default.BsonDefaults.DynamicArraySerializer = value;
3535
}
3636

3737
/// <summary>
3838
/// Gets or sets the dynamic document serializer.
3939
/// </summary>
4040
public static IBsonSerializer DynamicDocumentSerializer
4141
{
42-
get => BsonSerializer.DefaultSerializationDomain.BsonDefaults.DynamicDocumentSerializer;
43-
set => BsonSerializer.DefaultSerializationDomain.BsonDefaults.DynamicDocumentSerializer = value;
42+
get => BsonSerializationDomain.Default.BsonDefaults.DynamicDocumentSerializer;
43+
set => BsonSerializationDomain.Default.BsonDefaults.DynamicDocumentSerializer = value;
4444
}
4545

4646
/* DOMAIN-API We should modify the API to have those two values (and in the writer/reader settings where they are used) be nullable.
@@ -53,17 +53,17 @@ public static IBsonSerializer DynamicDocumentSerializer
5353
/// </summary>
5454
public static int MaxDocumentSize
5555
{
56-
get => BsonSerializer.DefaultSerializationDomain.BsonDefaults.MaxDocumentSize;
57-
set => BsonSerializer.DefaultSerializationDomain.BsonDefaults.MaxDocumentSize = value;
56+
get => BsonSerializationDomain.Default.BsonDefaults.MaxDocumentSize;
57+
set => BsonSerializationDomain.Default.BsonDefaults.MaxDocumentSize = value;
5858
}
5959

6060
/// <summary>
6161
/// Gets or sets the default max serialization depth (used to detect circular references during serialization). The default is 100.
6262
/// </summary>
6363
public static int MaxSerializationDepth
6464
{
65-
get => BsonSerializer.DefaultSerializationDomain.BsonDefaults.MaxSerializationDepth;
66-
set => BsonSerializer.DefaultSerializationDomain.BsonDefaults.MaxSerializationDepth = value;
65+
get => BsonSerializationDomain.Default.BsonDefaults.MaxSerializationDepth;
66+
set => BsonSerializationDomain.Default.BsonDefaults.MaxSerializationDepth = value;
6767
}
6868
}
6969
}

src/MongoDB.Bson/BsonDefaultsDomain.cs renamed to src/MongoDB.Bson/BsonDefaultsRegistry.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@
1919

2020
namespace MongoDB.Bson
2121
{
22-
internal class BsonDefaultsDomain : IBsonDefaults
22+
internal class BsonDefaultsRegistry : IBsonDefaults
2323
{
2424
private IBsonSerializationDomain _serializationDomain;
2525
private bool _dynamicArraySerializerWasSet;
2626
private IBsonSerializer _dynamicArraySerializer;
2727
private bool _dynamicDocumentSerializerWasSet;
2828
private IBsonSerializer _dynamicDocumentSerializer;
2929

30-
public BsonDefaultsDomain(IBsonSerializationDomain serializationDomain)
30+
public BsonDefaultsRegistry(IBsonSerializationDomain serializationDomain)
3131
{
3232
_serializationDomain = serializationDomain;
3333
}
@@ -70,4 +70,4 @@ public IBsonSerializer DynamicDocumentSerializer
7070

7171
public int MaxSerializationDepth { get; set; } = 100;
7272
}
73-
}
73+
}

src/MongoDB.Bson/BsonExtensionMethods.cs

Lines changed: 13 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ namespace MongoDB.Bson
2525
/// </summary>
2626
public static class BsonExtensionMethods
2727
{
28-
//DOMAIN-API We should remove all the methods that do not take a serialization domain.
29-
//QUESTION: Do we want to do something now about this...? It's used also internally, but it seems in most cases it's used for "default serialization", so it should be ok.
3028
/// <summary>
3129
/// Serializes an object to a BSON byte array.
3230
/// </summary>
@@ -43,21 +41,12 @@ public static byte[] ToBson<TNominalType>(
4341
IBsonSerializer<TNominalType> serializer = null,
4442
BsonBinaryWriterSettings writerSettings = null,
4543
Action<BsonSerializationContext.Builder> configurator = null,
46-
BsonSerializationArgs args = default,
47-
int estimatedBsonSize = 0) => ToBson(obj, BsonSerializer.DefaultSerializationDomain, serializer, writerSettings, configurator, args, estimatedBsonSize);
48-
49-
private static byte[] ToBson<TNominalType>(
50-
this TNominalType obj,
51-
IBsonSerializationDomain serializationDomain,
52-
IBsonSerializer<TNominalType> serializer = null,
53-
BsonBinaryWriterSettings writerSettings = null,
54-
Action<BsonSerializationContext.Builder> configurator = null,
55-
BsonSerializationArgs args = default,
44+
BsonSerializationArgs args = default(BsonSerializationArgs),
5645
int estimatedBsonSize = 0)
5746
{
5847
args.SetOrValidateNominalType(typeof(TNominalType), "<TNominalType>");
5948

60-
return ToBson(obj, typeof(TNominalType), serializationDomain, writerSettings, serializer, configurator, args, estimatedBsonSize);
49+
return ToBson(obj, typeof(TNominalType), writerSettings, serializer, configurator, args, estimatedBsonSize);
6150
}
6251

6352
/// <summary>
@@ -79,18 +68,7 @@ public static byte[] ToBson(
7968
BsonBinaryWriterSettings writerSettings = null,
8069
IBsonSerializer serializer = null,
8170
Action<BsonSerializationContext.Builder> configurator = null,
82-
BsonSerializationArgs args = default,
83-
int estimatedBsonSize = 0) => ToBson(obj, nominalType, BsonSerializer.DefaultSerializationDomain, writerSettings,
84-
serializer, configurator, args, estimatedBsonSize);
85-
86-
private static byte[] ToBson(
87-
this object obj,
88-
Type nominalType,
89-
IBsonSerializationDomain serializationDomain,
90-
BsonBinaryWriterSettings writerSettings = null,
91-
IBsonSerializer serializer = null,
92-
Action<BsonSerializationContext.Builder> configurator = null,
93-
BsonSerializationArgs args = default,
71+
BsonSerializationArgs args = default(BsonSerializationArgs),
9472
int estimatedBsonSize = 0)
9573
{
9674
if (estimatedBsonSize < 0)
@@ -106,7 +84,7 @@ private static byte[] ToBson(
10684

10785
if (serializer == null)
10886
{
109-
serializer = serializationDomain.LookupSerializer(nominalType);
87+
serializer = BsonSerializationDomain.Default.LookupSerializer(nominalType);
11088
}
11189
if (serializer.ValueType != nominalType)
11290
{
@@ -118,7 +96,7 @@ private static byte[] ToBson(
11896
{
11997
using (var bsonWriter = new BsonBinaryWriter(memoryStream, writerSettings ?? BsonBinaryWriterSettings.Defaults))
12098
{
121-
var context = BsonSerializationContext.CreateRoot(bsonWriter, serializationDomain, configurator);
99+
var context = BsonSerializationContext.CreateRoot(bsonWriter, configurator);
122100
serializer.Serialize(context, args, obj);
123101
}
124102
return memoryStream.ToArray();
@@ -138,7 +116,7 @@ public static BsonDocument ToBsonDocument<TNominalType>(
138116
this TNominalType obj,
139117
IBsonSerializer<TNominalType> serializer = null,
140118
Action<BsonSerializationContext.Builder> configurator = null,
141-
BsonSerializationArgs args = default)
119+
BsonSerializationArgs args = default(BsonSerializationArgs))
142120
{
143121
args.SetOrValidateNominalType(typeof(TNominalType), "<TNominalType>");
144122
return ToBsonDocument(obj, typeof(TNominalType), serializer, configurator, args);
@@ -160,16 +138,7 @@ public static BsonDocument ToBsonDocument(
160138
Type nominalType,
161139
IBsonSerializer serializer = null,
162140
Action<BsonSerializationContext.Builder> configurator = null,
163-
BsonSerializationArgs args = default) => ToBsonDocument(obj, nominalType,
164-
BsonSerializer.DefaultSerializationDomain, serializer, configurator, args);
165-
166-
private static BsonDocument ToBsonDocument(
167-
this object obj,
168-
Type nominalType,
169-
IBsonSerializationDomain serializationDomain,
170-
IBsonSerializer serializer = null,
171-
Action<BsonSerializationContext.Builder> configurator = null,
172-
BsonSerializationArgs args = default)
141+
BsonSerializationArgs args = default(BsonSerializationArgs))
173142
{
174143
if (nominalType == null)
175144
{
@@ -196,7 +165,7 @@ private static BsonDocument ToBsonDocument(
196165
return convertibleToBsonDocument.ToBsonDocument(); // use the provided ToBsonDocument method
197166
}
198167

199-
serializer = serializationDomain.LookupSerializer(nominalType);
168+
serializer = BsonSerializationDomain.Default.LookupSerializer(nominalType);
200169
}
201170
if (serializer.ValueType != nominalType)
202171
{
@@ -208,7 +177,7 @@ private static BsonDocument ToBsonDocument(
208177
var document = new BsonDocument();
209178
using (var bsonWriter = new BsonDocumentWriter(document))
210179
{
211-
var context = BsonSerializationContext.CreateRoot(bsonWriter, serializationDomain, configurator);
180+
var context = BsonSerializationContext.CreateRoot(bsonWriter, configurator);
212181
serializer.Serialize(context, args, obj);
213182
}
214183
return document;
@@ -231,7 +200,7 @@ public static string ToJson<TNominalType>(
231200
JsonWriterSettings writerSettings = null,
232201
IBsonSerializer<TNominalType> serializer = null,
233202
Action<BsonSerializationContext.Builder> configurator = null,
234-
BsonSerializationArgs args = default)
203+
BsonSerializationArgs args = default(BsonSerializationArgs))
235204
{
236205
args.SetOrValidateNominalType(typeof(TNominalType), "<TNominalType>");
237206
return ToJson(obj, typeof(TNominalType), writerSettings, serializer, configurator, args);
@@ -257,17 +226,7 @@ public static string ToJson(
257226
JsonWriterSettings writerSettings = null,
258227
IBsonSerializer serializer = null,
259228
Action<BsonSerializationContext.Builder> configurator = null,
260-
BsonSerializationArgs args = default)
261-
=> ToJson(obj, nominalType, BsonSerializer.DefaultSerializationDomain, writerSettings, serializer, configurator, args);
262-
263-
private static string ToJson(
264-
this object obj,
265-
Type nominalType,
266-
IBsonSerializationDomain domain,
267-
JsonWriterSettings writerSettings = null,
268-
IBsonSerializer serializer = null,
269-
Action<BsonSerializationContext.Builder> configurator = null,
270-
BsonSerializationArgs args = default)
229+
BsonSerializationArgs args = default(BsonSerializationArgs))
271230
{
272231
if (nominalType == null)
273232
{
@@ -277,7 +236,7 @@ private static string ToJson(
277236

278237
if (serializer == null)
279238
{
280-
serializer = domain.LookupSerializer(nominalType);
239+
serializer = BsonSerializationDomain.Default.LookupSerializer(nominalType);
281240
}
282241
if (serializer.ValueType != nominalType)
283242
{
@@ -289,7 +248,7 @@ private static string ToJson(
289248
{
290249
using (var bsonWriter = new JsonWriter(stringWriter, writerSettings ?? JsonWriterSettings.Defaults))
291250
{
292-
var context = BsonSerializationContext.CreateRoot(bsonWriter, domain, configurator);
251+
var context = BsonSerializationContext.CreateRoot(bsonWriter, configurator);
293252
serializer.Serialize(context, args, obj);
294253
}
295254
return stringWriter.ToString();

src/MongoDB.Bson/IO/BsonBinaryReaderSettings.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
using System;
1717
using System.Text;
18+
using MongoDB.Bson.Serialization;
1819

1920
namespace MongoDB.Bson.IO
2021
{
@@ -30,7 +31,7 @@ public class BsonBinaryReaderSettings : BsonReaderSettings
3031
private UTF8Encoding _encoding = Utf8Encodings.Strict;
3132
private bool _fixOldBinarySubTypeOnInput = true;
3233
private bool _fixOldDateTimeMaxValueOnInput = true;
33-
private int _maxDocumentSize = BsonDefaults.MaxDocumentSize;
34+
private int _maxDocumentSize = BsonSerializationDomain.Default.BsonDefaults.MaxDocumentSize;
3435

3536
// constructors
3637
/// <summary>

src/MongoDB.Bson/IO/BsonBinaryWriterSettings.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
using System;
1717
using System.Text;
18+
using MongoDB.Bson.Serialization;
1819

1920
namespace MongoDB.Bson.IO
2021
{
@@ -29,7 +30,7 @@ public class BsonBinaryWriterSettings : BsonWriterSettings
2930
// private fields
3031
private UTF8Encoding _encoding = Utf8Encodings.Strict;
3132
private bool _fixOldBinarySubTypeOnOutput = true;
32-
private int _maxDocumentSize = BsonDefaults.MaxDocumentSize;
33+
private int _maxDocumentSize = BsonSerializationDomain.Default.BsonDefaults.MaxDocumentSize;
3334

3435
// constructors
3536
/// <summary>

src/MongoDB.Bson/IO/BsonReader.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -321,13 +321,13 @@ public virtual IByteBuffer ReadRawBsonArray()
321321
// overridden in BsonBinaryReader to read the raw bytes from the stream
322322
// for all other streams, deserialize the array and reserialize it using a BsonBinaryWriter to get the raw bytes
323323

324-
var deserializationContext = BsonDeserializationContext.CreateRoot(this, BsonSerializer.DefaultSerializationDomain);
324+
var deserializationContext = BsonDeserializationContext.CreateRoot(this);
325325
var array = BsonArraySerializer.Instance.Deserialize(deserializationContext);
326326

327327
using (var memoryStream = new MemoryStream())
328328
using (var bsonWriter = new BsonBinaryWriter(memoryStream, BsonBinaryWriterSettings.Defaults))
329329
{
330-
var serializationContext = BsonSerializationContext.CreateRoot(bsonWriter, BsonSerializer.DefaultSerializationDomain);
330+
var serializationContext = BsonSerializationContext.CreateRoot(bsonWriter);
331331
bsonWriter.WriteStartDocument();
332332
var startPosition = memoryStream.Position + 3; // just past BsonType, "x" and null byte
333333
bsonWriter.WriteName("x");
@@ -351,7 +351,7 @@ public virtual IByteBuffer ReadRawBsonDocument()
351351
// overridden in BsonBinaryReader to read the raw bytes from the stream
352352
// for all other streams, deserialize the document and use ToBson to get the raw bytes
353353

354-
var deserializationContext = BsonDeserializationContext.CreateRoot(this, BsonSerializer.DefaultSerializationDomain);
354+
var deserializationContext = BsonDeserializationContext.CreateRoot(this);
355355
var document = BsonDocumentSerializer.Instance.Deserialize(deserializationContext);
356356
var bytes = document.ToBson();
357357
return new ByteArrayBuffer(bytes, isReadOnly: true);

src/MongoDB.Bson/IO/BsonWriter.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -326,13 +326,13 @@ public virtual void WriteRawBsonArray(IByteBuffer slice)
326326
stream.Position = 0;
327327
using (var reader = new BsonBinaryReader(stream, BsonBinaryReaderSettings.Defaults))
328328
{
329-
var deserializationContext = BsonDeserializationContext.CreateRoot(reader, BsonSerializer.DefaultSerializationDomain);
329+
var deserializationContext = BsonDeserializationContext.CreateRoot(reader);
330330
reader.ReadStartDocument();
331331
reader.ReadName("x");
332332
var array = BsonArraySerializer.Instance.Deserialize(deserializationContext);
333333
reader.ReadEndDocument();
334334

335-
var serializationContext = BsonSerializationContext.CreateRoot(this, BsonSerializer.DefaultSerializationDomain);
335+
var serializationContext = BsonSerializationContext.CreateRoot(this);
336336
BsonArraySerializer.Instance.Serialize(serializationContext, array);
337337
}
338338
}
@@ -350,10 +350,10 @@ public virtual void WriteRawBsonDocument(IByteBuffer slice)
350350
using (var stream = new ByteBufferStream(slice, ownsBuffer: false))
351351
using (var bsonReader = new BsonBinaryReader(stream, BsonBinaryReaderSettings.Defaults))
352352
{
353-
var deserializationContext = BsonDeserializationContext.CreateRoot(bsonReader, BsonSerializer.DefaultSerializationDomain);
353+
var deserializationContext = BsonDeserializationContext.CreateRoot(bsonReader);
354354
var document = BsonDocumentSerializer.Instance.Deserialize(deserializationContext);
355355

356-
var serializationContext = BsonSerializationContext.CreateRoot(this, BsonSerializer.DefaultSerializationDomain);
356+
var serializationContext = BsonSerializationContext.CreateRoot(this);
357357
BsonDocumentSerializer.Instance.Serialize(serializationContext, document);
358358
}
359359
}

src/MongoDB.Bson/IO/BsonWriterSettings.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
*/
1515

1616
using System;
17+
using MongoDB.Bson.Serialization;
1718

1819
namespace MongoDB.Bson.IO
1920
{
@@ -24,7 +25,7 @@ public abstract class BsonWriterSettings
2425
{
2526
// private fields
2627
private bool _isFrozen;
27-
private int _maxSerializationDepth = BsonDefaults.MaxSerializationDepth;
28+
private int _maxSerializationDepth = BsonSerializationDomain.Default.BsonDefaults.MaxSerializationDepth;
2829

2930
// constructors
3031
/// <summary>

src/MongoDB.Bson/IO/ElementAppendingBsonWriter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public override void WriteEndDocument()
6060
Wrapped.PushSettings(_settingsConfigurator);
6161
try
6262
{
63-
var context = BsonSerializationContext.CreateRoot(Wrapped, BsonSerializer.DefaultSerializationDomain);
63+
var context = BsonSerializationContext.CreateRoot(Wrapped);
6464
foreach (var element in _elements)
6565
{
6666
Wrapped.WriteName(element.Name);

src/MongoDB.Bson/IO/IBsonReader.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717

1818
namespace MongoDB.Bson.IO
1919
{
20-
//DOMAIN-API This interface should have the setting property as well probably., same way it's done for thr writer.
21-
//Even if we don't need it now, it could be needed in the future.
2220
/// <summary>
2321
/// Represents a BSON reader.
2422
/// </summary>

0 commit comments

Comments
 (0)