From 14ee91e7c15745123f79d76be5e90c019da92c43 Mon Sep 17 00:00:00 2001 From: Mike Minutillo Date: Wed, 6 Mar 2024 15:33:28 +0800 Subject: [PATCH] Reproduce the problem --- src/ComplexSerializerTest.sln | 43 ++++++++++++++++++++ src/MessageContracts/Contracts.cs | 11 +++++ src/MessageContracts/MessageContracts.csproj | 9 ++++ src/Messages/Class1.cs | 14 +++++++ src/Messages/Messages.csproj | 13 ++++++ src/Receiver/ComplexContractHandler.cs | 12 ++++++ src/Receiver/Program.cs | 21 ++++++++++ src/Receiver/Receiver.csproj | 18 ++++++++ src/Sender/Program.cs | 31 ++++++++++++++ src/Sender/Sender.csproj | 19 +++++++++ 10 files changed, 191 insertions(+) create mode 100644 src/ComplexSerializerTest.sln create mode 100644 src/MessageContracts/Contracts.cs create mode 100644 src/MessageContracts/MessageContracts.csproj create mode 100644 src/Messages/Class1.cs create mode 100644 src/Messages/Messages.csproj create mode 100644 src/Receiver/ComplexContractHandler.cs create mode 100644 src/Receiver/Program.cs create mode 100644 src/Receiver/Receiver.csproj create mode 100644 src/Sender/Program.cs create mode 100644 src/Sender/Sender.csproj diff --git a/src/ComplexSerializerTest.sln b/src/ComplexSerializerTest.sln new file mode 100644 index 0000000..a695ad1 --- /dev/null +++ b/src/ComplexSerializerTest.sln @@ -0,0 +1,43 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.10.34607.79 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sender", "Sender\Sender.csproj", "{A585D41C-B732-42AD-81ED-572080D2021E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Receiver", "Receiver\Receiver.csproj", "{377D6303-9705-4245-980D-50450B63FA1C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessageContracts", "MessageContracts\MessageContracts.csproj", "{EC1E505C-A782-4A97-AA38-583C0EB245A9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Messages", "Messages\Messages.csproj", "{77899F03-CEFC-4862-AEBF-073C105A9645}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A585D41C-B732-42AD-81ED-572080D2021E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A585D41C-B732-42AD-81ED-572080D2021E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A585D41C-B732-42AD-81ED-572080D2021E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A585D41C-B732-42AD-81ED-572080D2021E}.Release|Any CPU.Build.0 = Release|Any CPU + {377D6303-9705-4245-980D-50450B63FA1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {377D6303-9705-4245-980D-50450B63FA1C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {377D6303-9705-4245-980D-50450B63FA1C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {377D6303-9705-4245-980D-50450B63FA1C}.Release|Any CPU.Build.0 = Release|Any CPU + {EC1E505C-A782-4A97-AA38-583C0EB245A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EC1E505C-A782-4A97-AA38-583C0EB245A9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EC1E505C-A782-4A97-AA38-583C0EB245A9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EC1E505C-A782-4A97-AA38-583C0EB245A9}.Release|Any CPU.Build.0 = Release|Any CPU + {77899F03-CEFC-4862-AEBF-073C105A9645}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {77899F03-CEFC-4862-AEBF-073C105A9645}.Debug|Any CPU.Build.0 = Debug|Any CPU + {77899F03-CEFC-4862-AEBF-073C105A9645}.Release|Any CPU.ActiveCfg = Release|Any CPU + {77899F03-CEFC-4862-AEBF-073C105A9645}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {DAC70A48-A91C-4832-B7F2-B67621CFC55D} + EndGlobalSection +EndGlobal diff --git a/src/MessageContracts/Contracts.cs b/src/MessageContracts/Contracts.cs new file mode 100644 index 0000000..85bac25 --- /dev/null +++ b/src/MessageContracts/Contracts.cs @@ -0,0 +1,11 @@ +namespace MessageContracts; + +public interface IComplexContract +{ + IComplexChild? Child { get; } +} + +public interface IComplexChild +{ + bool IsComplex { get; } +} diff --git a/src/MessageContracts/MessageContracts.csproj b/src/MessageContracts/MessageContracts.csproj new file mode 100644 index 0000000..fa71b7a --- /dev/null +++ b/src/MessageContracts/MessageContracts.csproj @@ -0,0 +1,9 @@ + + + + net8.0 + enable + enable + + + diff --git a/src/Messages/Class1.cs b/src/Messages/Class1.cs new file mode 100644 index 0000000..8f8b644 --- /dev/null +++ b/src/Messages/Class1.cs @@ -0,0 +1,14 @@ +using MessageContracts; + +namespace Messages; + +public class ConcreteContract : IComplexContract +{ + public ConcreteChild? Child { get; set; } + IComplexChild? IComplexContract.Child => Child; +} + +public class ConcreteChild : IComplexChild +{ + public bool IsComplex => true; +} \ No newline at end of file diff --git a/src/Messages/Messages.csproj b/src/Messages/Messages.csproj new file mode 100644 index 0000000..e026a64 --- /dev/null +++ b/src/Messages/Messages.csproj @@ -0,0 +1,13 @@ + + + + net8.0 + enable + enable + + + + + + + diff --git a/src/Receiver/ComplexContractHandler.cs b/src/Receiver/ComplexContractHandler.cs new file mode 100644 index 0000000..b5a6880 --- /dev/null +++ b/src/Receiver/ComplexContractHandler.cs @@ -0,0 +1,12 @@ +using MessageContracts; + +namespace Receiver; + +class ComplexContractHandler : IHandleMessages +{ + public Task Handle(IComplexContract message, IMessageHandlerContext context) + { + Console.WriteLine($"Received message {message?.Child?.IsComplex}"); + return Task.CompletedTask; + } +} diff --git a/src/Receiver/Program.cs b/src/Receiver/Program.cs new file mode 100644 index 0000000..b50f9dd --- /dev/null +++ b/src/Receiver/Program.cs @@ -0,0 +1,21 @@ +using MessageContracts; + +Console.Title = "Receiver"; + +var endpointConfig = new EndpointConfiguration("Receiver"); + +endpointConfig.UseTransport(); +endpointConfig.UseSerialization(); + +endpointConfig.Conventions().DefiningMessagesAs(t => t.Assembly == typeof(IComplexContract).Assembly + || t.Name == "ConcreteContract"); + +var endpoint = await Endpoint.Start(endpointConfig); + +while(Console.ReadKey(true).Key != ConsoleKey.Escape) +{ + +} + +await endpoint.Stop(); + diff --git a/src/Receiver/Receiver.csproj b/src/Receiver/Receiver.csproj new file mode 100644 index 0000000..a1b1d9c --- /dev/null +++ b/src/Receiver/Receiver.csproj @@ -0,0 +1,18 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + + + + + diff --git a/src/Sender/Program.cs b/src/Sender/Program.cs new file mode 100644 index 0000000..32e3bdc --- /dev/null +++ b/src/Sender/Program.cs @@ -0,0 +1,31 @@ +using MessageContracts; +using Messages; + +Console.Title = "Sender"; + +var endpointConfig = new EndpointConfiguration("Sender"); + +endpointConfig.UseTransport(); +endpointConfig.UseSerialization(); +endpointConfig.Conventions().DefiningMessagesAs(t => t.Assembly == typeof(IComplexContract).Assembly + || t == typeof(ConcreteContract)); + +var endpoint = await Endpoint.Start(endpointConfig); + +Console.WriteLine("Started"); + +while (Console.ReadKey(true).Key != ConsoleKey.Escape) +{ + await endpoint.Send( + "Receiver", + new ConcreteContract + { + Child = new ConcreteChild() + } + ); + Console.WriteLine("Message sent"); +} + +await endpoint.Stop(); + +Console.WriteLine("Stopped"); diff --git a/src/Sender/Sender.csproj b/src/Sender/Sender.csproj new file mode 100644 index 0000000..3c923ba --- /dev/null +++ b/src/Sender/Sender.csproj @@ -0,0 +1,19 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + + + + + +