Skip to content

Commit cacf077

Browse files
committed
Added BsonDefaults to domain
1 parent b489c38 commit cacf077

File tree

8 files changed

+137
-44
lines changed

8 files changed

+137
-44
lines changed

src/MongoDB.Bson/BsonDefaults.cs

Lines changed: 8 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -24,71 +24,41 @@ namespace MongoDB.Bson
2424
/// </summary>
2525
public static class BsonDefaults
2626
{
27-
// private static fields
28-
private static bool __dynamicArraySerializerWasSet;
29-
private static IBsonSerializer __dynamicArraySerializer;
30-
private static bool __dynamicDocumentSerializerWasSet;
31-
private static IBsonSerializer __dynamicDocumentSerializer;
32-
private static int __maxDocumentSize = int.MaxValue;
33-
private static int __maxSerializationDepth = 100;
34-
3527
// public static properties
3628
/// <summary>
3729
/// Gets or sets the dynamic array serializer.
3830
/// </summary>
3931
public static IBsonSerializer DynamicArraySerializer
4032
{
41-
get
42-
{
43-
if (!__dynamicArraySerializerWasSet)
44-
{
45-
__dynamicArraySerializer = BsonSerializer.LookupSerializer<List<object>>(); //TODO Should we change this? Maybe all the classes that are using this should use the local domain if this is not set
46-
}
47-
return __dynamicArraySerializer;
48-
}
49-
set
50-
{
51-
__dynamicArraySerializerWasSet = true;
52-
__dynamicArraySerializer = value;
53-
}
33+
get => BsonSerializer.DefaultSerializationDomain.BsonDefaults.DynamicArraySerializer;
34+
set => BsonSerializer.DefaultSerializationDomain.BsonDefaults.DynamicArraySerializer = value;
5435
}
5536

5637
/// <summary>
5738
/// Gets or sets the dynamic document serializer.
5839
/// </summary>
5940
public static IBsonSerializer DynamicDocumentSerializer
6041
{
61-
get
62-
{
63-
if (!__dynamicDocumentSerializerWasSet)
64-
{
65-
__dynamicDocumentSerializer = BsonSerializer.LookupSerializer<ExpandoObject>(); //TODO ??
66-
}
67-
return __dynamicDocumentSerializer;
68-
}
69-
set
70-
{
71-
__dynamicDocumentSerializerWasSet = true;
72-
__dynamicDocumentSerializer = value;
73-
}
42+
get => BsonSerializer.DefaultSerializationDomain.BsonDefaults.DynamicDocumentSerializer;
43+
set => BsonSerializer.DefaultSerializationDomain.BsonDefaults.DynamicDocumentSerializer = value;
7444
}
7545

7646
/// <summary>
7747
/// Gets or sets the default max document size. The default is 4MiB.
7848
/// </summary>
7949
public static int MaxDocumentSize
8050
{
81-
get { return __maxDocumentSize; }
82-
set { __maxDocumentSize = value; }
51+
get => BsonSerializer.DefaultSerializationDomain.BsonDefaults.MaxDocumentSize;
52+
set => BsonSerializer.DefaultSerializationDomain.BsonDefaults.MaxDocumentSize = value;
8353
}
8454

8555
/// <summary>
8656
/// Gets or sets the default max serialization depth (used to detect circular references during serialization). The default is 100.
8757
/// </summary>
8858
public static int MaxSerializationDepth
8959
{
90-
get { return __maxSerializationDepth; }
91-
set { __maxSerializationDepth = value; }
60+
get => BsonSerializer.DefaultSerializationDomain.BsonDefaults.MaxSerializationDepth;
61+
set => BsonSerializer.DefaultSerializationDomain.BsonDefaults.MaxSerializationDepth = value;
9262
}
9363
}
9464
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/* Copyright 2010-present MongoDB Inc.
2+
*
3+
* Licensed under the Apache License, Version 2.0 (the "License");
4+
* you may not use this file except in compliance with the License.
5+
* You may obtain a copy of the License at
6+
*
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
*
9+
* Unless required by applicable law or agreed to in writing, software
10+
* distributed under the License is distributed on an "AS IS" BASIS,
11+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
* See the License for the specific language governing permissions and
13+
* limitations under the License.
14+
*/
15+
16+
using System.Collections.Generic;
17+
using System.Dynamic;
18+
using MongoDB.Bson.Serialization;
19+
20+
namespace MongoDB.Bson
21+
{
22+
internal class BsonDefaultsDomain : IBsonDefaults //TODO This will need to be public at a later point
23+
{
24+
private IBsonSerializationDomain _serializationDomain;
25+
private bool _dynamicArraySerializerWasSet;
26+
private IBsonSerializer _dynamicArraySerializer;
27+
private bool _dynamicDocumentSerializerWasSet;
28+
private IBsonSerializer _dynamicDocumentSerializer;
29+
30+
public BsonDefaultsDomain(IBsonSerializationDomain serializationDomain)
31+
{
32+
_serializationDomain = serializationDomain;
33+
}
34+
35+
public IBsonSerializer DynamicArraySerializer
36+
{
37+
get
38+
{
39+
if (!_dynamicArraySerializerWasSet)
40+
{
41+
_dynamicArraySerializer = _serializationDomain.LookupSerializer<List<object>>();
42+
}
43+
return _dynamicArraySerializer;
44+
}
45+
set
46+
{
47+
_dynamicArraySerializerWasSet = true;
48+
_dynamicArraySerializer = value;
49+
}
50+
}
51+
52+
public IBsonSerializer DynamicDocumentSerializer
53+
{
54+
get
55+
{
56+
if (!_dynamicDocumentSerializerWasSet)
57+
{
58+
_dynamicDocumentSerializer = _serializationDomain.LookupSerializer<ExpandoObject>();
59+
}
60+
return _dynamicDocumentSerializer;
61+
}
62+
set
63+
{
64+
_dynamicDocumentSerializerWasSet = true;
65+
_dynamicDocumentSerializer = value;
66+
}
67+
}
68+
69+
public int MaxDocumentSize { get; set; } = int.MaxValue;
70+
71+
public int MaxSerializationDepth { get; set; } = 100;
72+
}
73+
}

src/MongoDB.Bson/BsonExtensionMethods.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public static byte[] ToBson(
8686
/// <returns></returns>
8787
/// <exception cref="ArgumentException"></exception>
8888
/// <exception cref="ArgumentNullException"></exception>
89-
public static byte[] ToBson(
89+
internal static byte[] ToBson(
9090
this object obj,
9191
Type nominalType,
9292
IBsonSerializationDomain serializationDomain,
@@ -178,7 +178,7 @@ public static BsonDocument ToBsonDocument(
178178
/// <returns></returns>
179179
/// <exception cref="ArgumentNullException"></exception>
180180
/// <exception cref="ArgumentException"></exception>
181-
public static BsonDocument ToBsonDocument(
181+
internal static BsonDocument ToBsonDocument(
182182
this object obj,
183183
Type nominalType,
184184
IBsonSerializationDomain serializationDomain,

src/MongoDB.Bson/IBsonDefaults.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/* Copyright 2010-present MongoDB Inc.
2+
*
3+
* Licensed under the Apache License, Version 2.0 (the "License");
4+
* you may not use this file except in compliance with the License.
5+
* You may obtain a copy of the License at
6+
*
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
*
9+
* Unless required by applicable law or agreed to in writing, software
10+
* distributed under the License is distributed on an "AS IS" BASIS,
11+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
* See the License for the specific language governing permissions and
13+
* limitations under the License.
14+
*/
15+
16+
using MongoDB.Bson.Serialization;
17+
18+
namespace MongoDB.Bson
19+
{
20+
/// <summary>
21+
/// //TODO
22+
/// </summary>
23+
public interface IBsonDefaults
24+
{
25+
/// <summary>
26+
///
27+
/// </summary>
28+
IBsonSerializer DynamicArraySerializer { get; set; }
29+
/// <summary>
30+
///
31+
/// </summary>
32+
IBsonSerializer DynamicDocumentSerializer { get; set; }
33+
/// <summary>
34+
///
35+
/// </summary>
36+
int MaxDocumentSize { get; set; }
37+
/// <summary>
38+
///
39+
/// </summary>
40+
int MaxSerializationDepth { get; set; }
41+
}
42+
}

src/MongoDB.Bson/IO/BsonBinaryReaderSettings.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ protected override BsonReaderSettings CloneImplementation()
137137
FixOldBinarySubTypeOnInput = _fixOldBinarySubTypeOnInput,
138138
FixOldDateTimeMaxValueOnInput = _fixOldDateTimeMaxValueOnInput,
139139
MaxDocumentSize = _maxDocumentSize,
140-
SerializationDomain = SerializationDomain, //TODO This can be improved
140+
SerializationDomain = SerializationDomain
141141
};
142142

143143
return clone;

src/MongoDB.Bson/Serialization/BsonSerializationDomain.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ namespace MongoDB.Bson.Serialization
1818
internal class BsonSerializationDomain : IBsonSerializationDomainInternal, IDisposable
1919
{
2020
// private fields
21+
private IBsonDefaults _bsonDefaults;
2122
private ReaderWriterLockSlim _configLock = new(LockRecursionPolicy.SupportsRecursion);
2223
private IBsonClassMapDomain _classMapDomain;
2324
private IConventionRegistryDomain _conventionRegistryDomain;
@@ -766,6 +767,8 @@ public void Serialize(
766767

767768
public IConventionRegistryDomain ConventionRegistry => _conventionRegistryDomain;
768769

770+
public IBsonDefaults BsonDefaults => _bsonDefaults;
771+
769772
/// <summary>
770773
/// Tries to register a serializer for a type.
771774
/// </summary>
@@ -847,6 +850,7 @@ private void CreateSubDomains()
847850
{
848851
_classMapDomain = new BsonClassMapDomain(this);
849852
_conventionRegistryDomain = new ConventionRegistryDomain();
853+
_bsonDefaults = new BsonDefaultsDomain(this);
850854
}
851855

852856
private void RegisterIdGenerators()

src/MongoDB.Bson/Serialization/IBsonSerializationDomain.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,11 @@ void Serialize(
293293
/// //TODO
294294
/// </summary>
295295
IConventionRegistryDomain ConventionRegistry { get; }
296+
297+
/// <summary>
298+
/// //TODO
299+
/// </summary>
300+
IBsonDefaults BsonDefaults { get; }
296301
}
297302

298303
internal interface IBsonSerializationDomainInternal : IBsonSerializationDomain

src/MongoDB.Driver/MongoClient.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -535,7 +535,7 @@ private ListDatabasesOperation CreateListDatabasesOperation(ListDatabasesOptions
535535
{
536536
AuthorizedDatabases = options.AuthorizedDatabases,
537537
Comment = options.Comment,
538-
Filter = options.Filter?.Render(new(BsonDocumentSerializer.Instance, _settings.SerializationDomain, translationOptions: translationOptions)),
538+
Filter = options.Filter?.Render(new(BsonDocumentSerializer.Instance, (_settings as IInheritableMongoClientSettings).SerializationDomain, translationOptions: translationOptions)),
539539
NameOnly = options.NameOnly,
540540
RetryRequested = _settings.RetryReads
541541
};
@@ -593,8 +593,7 @@ private MessageEncoderSettings GetMessageEncoderSettings()
593593
private RenderArgs<BsonDocument> GetRenderArgs()
594594
{
595595
var translationOptions = Settings.TranslationOptions;
596-
var serializerRegistry = BsonSerializer.SerializerRegistry;
597-
return new RenderArgs<BsonDocument>(BsonDocumentSerializer.Instance, _settings.SerializationDomain, translationOptions: translationOptions);
596+
return new RenderArgs<BsonDocument>(BsonDocumentSerializer.Instance, (_settings as IInheritableMongoClientSettings).SerializationDomain, translationOptions: translationOptions);
598597
}
599598

600599
private IClientSessionHandle StartSession(ClientSessionOptions options)

0 commit comments

Comments
 (0)