Skip to content

Commit 550eb97

Browse files
committed
Initial use of domain
1 parent 3f634d5 commit 550eb97

11 files changed

+34
-15
lines changed

src/MongoDB.Bson/Serialization/BsonClassMap.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ namespace MongoDB.Bson.Serialization
3232
public class BsonClassMap
3333
{
3434
// private static fields
35-
private readonly static Dictionary<Type, BsonClassMap> __classMaps = new Dictionary<Type, BsonClassMap>();
35+
private readonly static Dictionary<Type, BsonClassMap> __classMaps = new Dictionary<Type, BsonClassMap>(); //TODO I think the static fields and methods should not be here, but on the domain
3636
private readonly static Queue<Type> __knownTypesQueue = new Queue<Type>();
3737
private static int __freezeNestingLevel = 0;
3838

src/MongoDB.Bson/Serialization/BsonDeserializationContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ private BsonDeserializationContext(
4444
_allowDuplicateElementNames = allowDuplicateElementNames;
4545
_dynamicArraySerializer = dynamicArraySerializer;
4646
_dynamicDocumentSerializer = dynamicDocumentSerializer;
47-
_domain = domain;
47+
_domain = domain ?? BsonSerializer.DefaultDomain; //TODO Should we do it here or higher in the hierarchy...?
4848
}
4949

5050
// public properties

src/MongoDB.Bson/Serialization/BsonSerializationContext.cs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,26 @@ public class BsonSerializationContext
2626
// private fields
2727
private readonly Func<Type, bool> _isDynamicType;
2828
private readonly IBsonWriter _writer;
29+
private readonly IBsonSerializationDomain _domain;
2930

3031
// constructors
3132
private BsonSerializationContext(
3233
IBsonWriter writer,
33-
Func<Type, bool> isDynamicType)
34+
Func<Type, bool> isDynamicType,
35+
IBsonSerializationDomain domain)
3436
{
3537
_writer = writer;
3638
_isDynamicType = isDynamicType;
39+
_domain = domain ?? BsonSerializer.DefaultDomain; //TODO Should we do it here or higher in the hierarchy...?
3740
}
3841

3942
// public properties
43+
44+
/// <summary>
45+
/// //TODO
46+
/// </summary>
47+
public IBsonSerializationDomain Domain => _domain;
48+
4049
/// <summary>
4150
/// Gets a function that, when executed, will indicate whether the type
4251
/// is a dynamic type.
@@ -105,6 +114,7 @@ public class Builder
105114
// private fields
106115
private Func<Type, bool> _isDynamicType;
107116
private IBsonWriter _writer;
117+
private IBsonSerializationDomain _domain;
108118

109119
// constructors
110120
internal Builder(BsonSerializationContext other, IBsonWriter writer)
@@ -127,6 +137,15 @@ internal Builder(BsonSerializationContext other, IBsonWriter writer)
127137
}
128138
}
129139

140+
/// <summary>
141+
/// //TODO
142+
/// </summary>
143+
public IBsonSerializationDomain Domain
144+
{
145+
get => _domain;
146+
set => _domain = value;
147+
}
148+
130149
// properties
131150
/// <summary>
132151
/// Gets or sets the function used to determine if a type is a dynamic type.
@@ -155,7 +174,7 @@ public IBsonWriter Writer
155174
/// <returns>A BsonSerializationContext.</returns>
156175
internal BsonSerializationContext Build()
157176
{
158-
return new BsonSerializationContext(_writer, _isDynamicType);
177+
return new BsonSerializationContext(_writer, _isDynamicType, _domain);
159178
}
160179
}
161180
}

src/MongoDB.Bson/Serialization/Serializers/BsonClassMapSerializer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public override TClass Deserialize(BsonDeserializationContext context, BsonDeser
9696
return DeserializeClass(context);
9797
}
9898

99-
var serializer = BsonSerializer.LookupSerializer(actualType);
99+
var serializer = context.Domain.LookupSerializer(actualType);
100100
return (TClass)serializer.Deserialize(context);
101101
}
102102

@@ -392,7 +392,7 @@ public override void Serialize(BsonSerializationContext context, BsonSerializati
392392
return;
393393
}
394394

395-
var serializer = BsonSerializer.LookupSerializer(actualType);
395+
var serializer = context.Domain.LookupSerializer(actualType);
396396
serializer.Serialize(context, args, value);
397397
}
398398

src/MongoDB.Bson/Serialization/Serializers/BsonValueSerializerBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public override void Serialize(BsonSerializationContext context, BsonSerializati
7070
var actualType = value.GetType();
7171
if (actualType != ValueType && !args.SerializeAsNominalType)
7272
{
73-
var serializer = BsonSerializer.LookupSerializer(actualType);
73+
var serializer = context.Domain.LookupSerializer(actualType);
7474
serializer.Serialize(context, value);
7575
return;
7676
}

src/MongoDB.Bson/Serialization/Serializers/ClassSerializerBase.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public override TValue Deserialize(BsonDeserializationContext context, BsonDeser
4747
}
4848
else
4949
{
50-
var serializer = BsonSerializer.LookupSerializer(actualType);
50+
var serializer = context.Domain.LookupSerializer(actualType);
5151
return (TValue)serializer.Deserialize(context, args);
5252
}
5353
}
@@ -75,7 +75,7 @@ public override void Serialize(BsonSerializationContext context, BsonSerializati
7575
}
7676
else
7777
{
78-
var serializer = BsonSerializer.LookupSerializer(actualType);
78+
var serializer = context.Domain.LookupSerializer(actualType);
7979
serializer.Serialize(context, value);
8080
}
8181
}

src/MongoDB.Bson/Serialization/Serializers/DiscriminatedInterfaceSerializer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ public override TInterface Deserialize(BsonDeserializationContext context, BsonD
147147
throw new FormatException(message);
148148
}
149149

150-
var serializer = BsonSerializer.LookupSerializer(actualType);
150+
var serializer = context.Domain.LookupSerializer(actualType);
151151
return (TInterface)serializer.Deserialize(context, args);
152152
}
153153
}

src/MongoDB.Bson/Serialization/Serializers/DiscriminatedWrapperSerializer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public override TValue Deserialize(BsonDeserializationContext context, BsonDeser
7474
var bsonReader = context.Reader;
7575
var nominalType = args.NominalType;
7676
var actualType = _discriminatorConvention.GetActualType(bsonReader, nominalType);
77-
var serializer = BsonSerializer.LookupSerializer(actualType);
77+
var serializer = context.Domain.LookupSerializer(actualType);
7878

7979
TValue value = default(TValue);
8080
_helper.DeserializeMembers(context, (elementName, flag) =>

src/MongoDB.Bson/Serialization/Serializers/ImpliedImplementationInterfaceSerializer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ public override void Serialize(BsonSerializationContext context, BsonSerializati
279279
}
280280
else
281281
{
282-
var serializer = BsonSerializer.LookupSerializer(actualType);
282+
var serializer = context.Domain.LookupSerializer(actualType);
283283
serializer.Serialize(context, value);
284284
}
285285
}

src/MongoDB.Bson/Serialization/Serializers/ObjectSerializer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ private object DeserializeDiscriminatedValue(BsonDeserializationContext context,
389389
}
390390
else
391391
{
392-
var serializer = BsonSerializer.LookupSerializer(actualType);
392+
var serializer = context.Domain.LookupSerializer(actualType);
393393
var polymorphicSerializer = serializer as IBsonPolymorphicSerializer;
394394
if (polymorphicSerializer != null && polymorphicSerializer.IsDiscriminatorCompatibleWithObjectSerializer)
395395
{
@@ -438,7 +438,7 @@ private void SerializeDiscriminatedValue(BsonSerializationContext context, BsonS
438438
throw new BsonSerializationException($"Type {actualType.FullName} is not configured as a type that is allowed to be serialized for this instance of ObjectSerializer.");
439439
}
440440

441-
var serializer = BsonSerializer.LookupSerializer(actualType);
441+
var serializer = context.Domain.LookupSerializer(actualType);
442442

443443
var polymorphicSerializer = serializer as IBsonPolymorphicSerializer;
444444
if (polymorphicSerializer != null && polymorphicSerializer.IsDiscriminatorCompatibleWithObjectSerializer)

0 commit comments

Comments
 (0)