diff --git a/src/Dumpify.Playground/Program.cs b/src/Dumpify.Playground/Program.cs index 47952ec..6072c78 100644 --- a/src/Dumpify.Playground/Program.cs +++ b/src/Dumpify.Playground/Program.cs @@ -24,9 +24,12 @@ void TestSingle() //var map = new Dictionary() { ["One"] = 1, ["Two"] = 2, ["Three"] = 3 }.DumpConsole(); - //new AdditionValue(1, 10).Dump(members: new MembersConfig { IncludeFields = true, IncludeNonPublicMembers = true }); + new AdditionValue(1, 10).Dump(members: new MembersConfig { IncludeFields = true, IncludeNonPublicMembers = true, IncludeProperties = true}); + new AdditionValue(1, 10).Dump(members: new MembersConfig { IncludeFields = true, IncludeNonPublicMembers = false, IncludeProperties = false}); + new AdditionValue(1, 10).Dump(members: new MembersConfig { IncludeFields = true, IncludeNonPublicMembers = false, IncludeProperties = true}); + new AdditionValue(1, 10).Dump(members: new MembersConfig { IncludeFields = true, IncludeNonPublicMembers = true, IncludeProperties = true, IncludePublicMembers = false}); - Enumerable.Range(1, 3).Select((i, index) => new { i = i, index = index }).ToArray().Dump(); + //Enumerable.Range(1, 3).Select((i, index) => new { i = i, index = index }).ToArray().Dump(); } void ShowEverything() @@ -142,27 +145,30 @@ void ShowEverything() new Exception("This is an exception", new ArgumentNullException("blaParam", "This is inner exception")).Dump(); -//arr.Dump(); -//moaid.Dump(); + new AdditionValue(1, 10).Dump(members: new () { IncludeFields = true, IncludeNonPublicMembers = true, IncludeProperties = false }); + new AdditionValue(1, 10).Dump(members: new() { IncludeFields = true, IncludeNonPublicMembers = true }); + //arr.Dump(); + //moaid.Dump(); -//family.Dump(maxDepth: 2); -//Console.WriteLine(JsonSerializer.Serialize(moaid)); + //family.Dump(maxDepth: 2); + //Console.WriteLine(JsonSerializer.Serialize(moaid)); -//moaid.Dump(); -//arr2d.Dump(); -//moaid.Dump(maxDepth: 2); -//family.Dump(maxDepth: 2); -//arr.Dump(); -//arr2d.Dump(); -//((object)null).Dump(); + //moaid.Dump(); + //arr2d.Dump(); + + //moaid.Dump(maxDepth: 2); + //family.Dump(maxDepth: 2); + //arr.Dump(); + //arr2d.Dump(); + //((object)null).Dump(); -//var result = DumpConfig.Default.Generator.Generate(family.GetType(), null); + //var result = DumpConfig.Default.Generator.Generate(family.GetType(), null); -//JsonSerializer.Serialize(result, new JsonSerializerOptions { WriteIndented = true }); + //JsonSerializer.Serialize(result, new JsonSerializerOptions { WriteIndented = true }); } #pragma warning restore CS8321 diff --git a/src/Dumpify/Descriptors/Generators/CompositeDescriptorGenerator.cs b/src/Dumpify/Descriptors/Generators/CompositeDescriptorGenerator.cs index 371a3ce..18ea170 100644 --- a/src/Dumpify/Descriptors/Generators/CompositeDescriptorGenerator.cs +++ b/src/Dumpify/Descriptors/Generators/CompositeDescriptorGenerator.cs @@ -5,7 +5,7 @@ namespace Dumpify.Descriptors.Generators; internal class CompositeDescriptorGenerator : IDescriptorGenerator { - private readonly ConcurrentDictionary<(RuntimeTypeHandle, RuntimeTypeHandle?, string?), IDescriptor> _descriptorsCache = new(); + private readonly ConcurrentDictionary<(RuntimeTypeHandle, RuntimeTypeHandle?, string?, IMemberProvider), IDescriptor> _descriptorsCache = new(); private readonly IDescriptorGenerator[] _generatorsChain; @@ -22,7 +22,7 @@ public CompositeDescriptorGenerator(ConcurrentDictionary (type.TypeHandle, valueProvider?.Info.DeclaringType?.TypeHandle, valueProvider?.Name); + (RuntimeTypeHandle, RuntimeTypeHandle?, string?, IMemberProvider) CreateCacheKey(Type type, IValueProvider? valueProvider, IMemberProvider memberProvider) + => (type.TypeHandle, valueProvider?.Info.DeclaringType?.TypeHandle, valueProvider?.Name, memberProvider); private IDescriptor? GenerateDescriptor(Type type, IValueProvider? valueProvider, IMemberProvider memberProvider) { diff --git a/src/Dumpify/Descriptors/ValueProviders/IMemberProvider.cs b/src/Dumpify/Descriptors/ValueProviders/IMemberProvider.cs index 4442ee5..2bd027e 100644 --- a/src/Dumpify/Descriptors/ValueProviders/IMemberProvider.cs +++ b/src/Dumpify/Descriptors/ValueProviders/IMemberProvider.cs @@ -2,7 +2,7 @@ namespace Dumpify.Descriptors.ValueProviders; -public interface IMemberProvider +public interface IMemberProvider : IEquatable { IEnumerable GetMembers(Type type); } diff --git a/src/Dumpify/Descriptors/ValueProviders/MemberProvider.cs b/src/Dumpify/Descriptors/ValueProviders/MemberProvider.cs index b019ed7..54fd089 100644 --- a/src/Dumpify/Descriptors/ValueProviders/MemberProvider.cs +++ b/src/Dumpify/Descriptors/ValueProviders/MemberProvider.cs @@ -4,7 +4,7 @@ namespace Dumpify.Descriptors.ValueProviders; -internal class MemberProvider : IMemberProvider +internal sealed record MemberProvider : IMemberProvider { private readonly bool _includeProperties; private readonly bool _includeFields; @@ -52,4 +52,17 @@ public IEnumerable GetMembers(Type type) return members; } + + public bool Equals(IMemberProvider? provider) + { + if (provider is not MemberProvider other) + { + return false; + } + + return _includeProperties == other._includeProperties && _includeFields == other._includeFields && _includePublicMembers == other._includePublicMembers && _includeNonPublicMembers == other._includeNonPublicMembers; + } + + public override int GetHashCode() + => HashCode.Combine(_includeProperties, _includeFields, _includePublicMembers, _includeNonPublicMembers); } diff --git a/src/Dumpify/Renderers/RendererConfig.cs b/src/Dumpify/Renderers/RendererConfig.cs index 1787bd5..c4d096f 100644 --- a/src/Dumpify/Renderers/RendererConfig.cs +++ b/src/Dumpify/Renderers/RendererConfig.cs @@ -4,12 +4,8 @@ namespace Dumpify.Renderers; -public record struct RendererConfig +public record RendererConfig { - public RendererConfig() - { - } - public string? Label { get; init; } = null; public int? MaxDepth { get; init; } = null;