diff --git a/src/Hydrogen/ObjectSpaces/Builder/ObjectSpaceBuilder.cs b/src/Hydrogen/ObjectSpaces/Builder/ObjectSpaceBuilder.cs index 2ff2eeab..d94fa7b2 100644 --- a/src/Hydrogen/ObjectSpaces/Builder/ObjectSpaceBuilder.cs +++ b/src/Hydrogen/ObjectSpaces/Builder/ObjectSpaceBuilder.cs @@ -141,6 +141,10 @@ public ObjectSpaceBuilder UsingSerializerFactory(SerializerFactory factory) { return this; } + public bool ContainsSerializer() => ContainsSerializer(typeof(TItem)); + + public bool ContainsSerializer(Type type) => _serializerFactory.ContainsSerializer(type); + public ObjectSpaceBuilder UsingSerializer() where TItemSerializer : IItemSerializer, new() { Guard.Against(_usingCustomSerializerFactory, ErrMsgUsingSerializer); _specifiedCustomSerializer = true; @@ -155,6 +159,15 @@ public ObjectSpaceBuilder UsingSerializer(IItemSerializer serializ return this; } + public ObjectSpaceBuilder MakeSerializer() => MakeSerializer(typeof(TItem)); + + public ObjectSpaceBuilder MakeSerializer(Type type) { + Guard.Ensure(!_serializerFactory.ContainsSerializer(type), $"Serializer for type {type.ToStringCS()} has already been registered."); + _specifiedCustomSerializer = true; + _serializerFactory.RegisterAutoBuild(type); + return this; + } + public ObjectSpaceBuilder UsingComparerFactory(ComparerFactory factory) { Guard.ArgumentNotNull(factory, nameof(factory)); Guard.Against(_specifiedCustomComparer, ErrMsgUseComparerFactory); diff --git a/src/Hydrogen/ObjectSpaces/Builder/ObjectSpaceDimensionBuilder.cs b/src/Hydrogen/ObjectSpaces/Builder/ObjectSpaceDimensionBuilder.cs index 2c821de5..3e972acf 100644 --- a/src/Hydrogen/ObjectSpaces/Builder/ObjectSpaceDimensionBuilder.cs +++ b/src/Hydrogen/ObjectSpaces/Builder/ObjectSpaceDimensionBuilder.cs @@ -42,6 +42,11 @@ public ObjectSpaceDimensionBuilder UsingSerializer(IItemSerializer seriali return this; } + public ObjectSpaceDimensionBuilder MakeSerializer() { + _parent.MakeSerializer(); + return this; + } + public ObjectSpaceDimensionBuilder UsingComparer() where TComparer : IComparer, new() { _parent.UsingComparer(); return this; @@ -161,6 +166,8 @@ public ObjectSpaceDimensionBuilder OptimizeAssumingAverageItemSize(int bytes) } public ObjectSpaceBuilder Done() { + if (!_parent.ContainsSerializer(typeof(T))) + MakeSerializer(); return _parent; }