com.wallstop-studios.dxmessaging 2.1.6 → 2.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1405) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +113 -13
  3. package/package.json +31 -2
  4. package/.artifacts/SourceGenerators.Tests/TestResults/0e800bba-2376-4062-bb19-cf916d3083a1/coverage.cobertura.xml +0 -2624
  5. package/.artifacts/SourceGenerators.Tests/TestResults/260ab294-e640-4674-9ae9-29b5344c0540/coverage.cobertura.xml +0 -2624
  6. package/.artifacts/SourceGenerators.Tests/TestResults/31c02772-7d85-4466-a2c4-93742725076e/coverage.cobertura.xml +0 -2624
  7. package/.artifacts/SourceGenerators.Tests/TestResults/ca4d2ef2-0c53-49dc-91b5-039938571ed8/coverage.cobertura.xml +0 -2624
  8. package/.artifacts/SourceGenerators.Tests/TestResults/f6cadd7e-1bf5-44b0-9351-47426600fc69/coverage.cobertura.xml +0 -2624
  9. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/.msCoverageSourceRootsMapping_WallstopStudios.DxMessaging.SourceGenerators.Tests +0 -0
  10. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/CoverletSourceRootsMapping_WallstopStudios.DxMessaging.SourceGenerators.Tests +0 -0
  11. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.ApplicationInsights.dll +0 -0
  12. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.CodeAnalysis.CSharp.dll +0 -0
  13. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.CodeAnalysis.dll +0 -0
  14. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.TestPlatform.AdapterUtilities.dll +0 -0
  15. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.TestPlatform.CommunicationUtilities.dll +0 -0
  16. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.TestPlatform.CoreUtilities.dll +0 -0
  17. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.TestPlatform.CrossPlatEngine.dll +0 -0
  18. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.TestPlatform.PlatformAbstractions.dll +0 -0
  19. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.TestPlatform.Utilities.dll +0 -0
  20. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.Testing.Extensions.MSBuild.dll +0 -0
  21. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.Testing.Extensions.Telemetry.dll +0 -0
  22. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.Testing.Extensions.TrxReport.Abstractions.dll +0 -0
  23. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.Testing.Extensions.VSTestBridge.dll +0 -0
  24. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.Testing.Platform.dll +0 -0
  25. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.VisualStudio.CodeCoverage.Shim.dll +0 -0
  26. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.VisualStudio.TestPlatform.Common.dll +0 -0
  27. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll +0 -0
  28. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/NUnit3.TestAdapter.dll +0 -0
  29. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Newtonsoft.Json.dll +0 -0
  30. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.deps.json +0 -872
  31. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  32. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.runtimeconfig.json +0 -13
  33. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.dll +0 -0
  34. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  35. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.CodeAnalysis.resources.dll +0 -0
  36. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  37. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  38. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  39. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  40. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  41. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  42. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  43. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.Testing.Platform.resources.dll +0 -0
  44. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  45. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  46. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  47. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.CodeAnalysis.resources.dll +0 -0
  48. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  49. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  50. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  51. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  52. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  53. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  54. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  55. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.Testing.Platform.resources.dll +0 -0
  56. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  57. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  58. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  59. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.CodeAnalysis.resources.dll +0 -0
  60. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  61. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  62. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  63. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  64. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  65. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  66. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  67. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.Testing.Platform.resources.dll +0 -0
  68. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  69. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  70. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  71. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.CodeAnalysis.resources.dll +0 -0
  72. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  73. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  74. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  75. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  76. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  77. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  78. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  79. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.Testing.Platform.resources.dll +0 -0
  80. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  81. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  82. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  83. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.CodeAnalysis.resources.dll +0 -0
  84. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  85. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  86. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  87. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  88. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  89. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  90. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  91. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.Testing.Platform.resources.dll +0 -0
  92. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  93. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  94. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  95. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.CodeAnalysis.resources.dll +0 -0
  96. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  97. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  98. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  99. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  100. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  101. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  102. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  103. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.Testing.Platform.resources.dll +0 -0
  104. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  105. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  106. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  107. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.CodeAnalysis.resources.dll +0 -0
  108. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  109. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  110. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  111. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  112. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  113. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  114. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  115. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.Testing.Platform.resources.dll +0 -0
  116. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  117. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  118. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/nunit.engine.api.dll +0 -0
  119. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/nunit.engine.core.dll +0 -0
  120. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/nunit.engine.dll +0 -0
  121. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/nunit.framework.dll +0 -0
  122. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/nunit.framework.legacy.dll +0 -0
  123. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  124. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.CodeAnalysis.resources.dll +0 -0
  125. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  126. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  127. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  128. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  129. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  130. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  131. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  132. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.Testing.Platform.resources.dll +0 -0
  133. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  134. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  135. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  136. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.CodeAnalysis.resources.dll +0 -0
  137. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  138. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  139. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  140. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  141. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  142. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  143. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  144. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.Testing.Platform.resources.dll +0 -0
  145. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  146. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  147. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  148. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.CodeAnalysis.resources.dll +0 -0
  149. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  150. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  151. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  152. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  153. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  154. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  155. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  156. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.Testing.Platform.resources.dll +0 -0
  157. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  158. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  159. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/testcentric.engine.metadata.dll +0 -0
  160. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/testhost.dll +0 -0
  161. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/testhost.exe +0 -0
  162. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  163. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.CodeAnalysis.resources.dll +0 -0
  164. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  165. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  166. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  167. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  168. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  169. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  170. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  171. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.Testing.Platform.resources.dll +0 -0
  172. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  173. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  174. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  175. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll +0 -0
  176. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  177. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  178. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  179. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  180. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  181. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  182. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  183. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.Testing.Platform.resources.dll +0 -0
  184. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  185. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  186. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  187. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll +0 -0
  188. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  189. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  190. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  191. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  192. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  193. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  194. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  195. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.Testing.Platform.resources.dll +0 -0
  196. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  197. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  198. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/.msCoverageSourceRootsMapping_WallstopStudios.DxMessaging.SourceGenerators.Tests +0 -0
  199. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/CoverletSourceRootsMapping_WallstopStudios.DxMessaging.SourceGenerators.Tests +0 -0
  200. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.ApplicationInsights.dll +0 -0
  201. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.CodeAnalysis.CSharp.dll +0 -0
  202. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.CodeAnalysis.dll +0 -0
  203. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.Extensions.DependencyModel.dll +0 -0
  204. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.TestPlatform.AdapterUtilities.dll +0 -0
  205. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.TestPlatform.CommunicationUtilities.dll +0 -0
  206. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.TestPlatform.CoreUtilities.dll +0 -0
  207. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.TestPlatform.CrossPlatEngine.dll +0 -0
  208. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.TestPlatform.PlatformAbstractions.dll +0 -0
  209. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.TestPlatform.Utilities.dll +0 -0
  210. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.Testing.Extensions.MSBuild.dll +0 -0
  211. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.Testing.Extensions.Telemetry.dll +0 -0
  212. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.Testing.Extensions.TrxReport.Abstractions.dll +0 -0
  213. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.Testing.Extensions.VSTestBridge.dll +0 -0
  214. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.Testing.Platform.dll +0 -0
  215. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.VisualStudio.CodeCoverage.Shim.dll +0 -0
  216. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.VisualStudio.TestPlatform.Common.dll +0 -0
  217. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll +0 -0
  218. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/NUnit3.TestAdapter.dll +0 -0
  219. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Newtonsoft.Json.dll +0 -0
  220. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.deps.json +0 -817
  221. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  222. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.runtimeconfig.json +0 -14
  223. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.dll +0 -0
  224. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  225. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.CodeAnalysis.resources.dll +0 -0
  226. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  227. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  228. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  229. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  230. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  231. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  232. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  233. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.Testing.Platform.resources.dll +0 -0
  234. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  235. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  236. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  237. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.CodeAnalysis.resources.dll +0 -0
  238. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  239. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  240. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  241. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  242. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  243. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  244. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  245. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.Testing.Platform.resources.dll +0 -0
  246. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  247. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  248. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  249. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.CodeAnalysis.resources.dll +0 -0
  250. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  251. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  252. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  253. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  254. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  255. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  256. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  257. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.Testing.Platform.resources.dll +0 -0
  258. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  259. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  260. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  261. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.CodeAnalysis.resources.dll +0 -0
  262. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  263. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  264. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  265. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  266. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  267. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  268. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  269. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.Testing.Platform.resources.dll +0 -0
  270. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  271. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  272. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  273. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.CodeAnalysis.resources.dll +0 -0
  274. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  275. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  276. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  277. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  278. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  279. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  280. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  281. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.Testing.Platform.resources.dll +0 -0
  282. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  283. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  284. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  285. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.CodeAnalysis.resources.dll +0 -0
  286. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  287. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  288. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  289. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  290. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  291. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  292. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  293. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.Testing.Platform.resources.dll +0 -0
  294. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  295. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  296. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  297. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.CodeAnalysis.resources.dll +0 -0
  298. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  299. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  300. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  301. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  302. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  303. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  304. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  305. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.Testing.Platform.resources.dll +0 -0
  306. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  307. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  308. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/nunit.engine.api.dll +0 -0
  309. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/nunit.engine.core.dll +0 -0
  310. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/nunit.engine.dll +0 -0
  311. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/nunit.framework.dll +0 -0
  312. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/nunit.framework.legacy.dll +0 -0
  313. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  314. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.CodeAnalysis.resources.dll +0 -0
  315. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  316. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  317. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  318. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  319. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  320. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  321. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  322. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.Testing.Platform.resources.dll +0 -0
  323. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  324. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  325. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  326. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.CodeAnalysis.resources.dll +0 -0
  327. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  328. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  329. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  330. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  331. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  332. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  333. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  334. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.Testing.Platform.resources.dll +0 -0
  335. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  336. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  337. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  338. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.CodeAnalysis.resources.dll +0 -0
  339. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  340. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  341. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  342. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  343. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  344. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  345. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  346. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.Testing.Platform.resources.dll +0 -0
  347. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  348. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  349. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/testcentric.engine.metadata.dll +0 -0
  350. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/testhost.dll +0 -0
  351. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/testhost.exe +0 -0
  352. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  353. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.CodeAnalysis.resources.dll +0 -0
  354. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  355. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  356. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  357. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  358. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  359. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  360. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  361. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.Testing.Platform.resources.dll +0 -0
  362. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  363. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  364. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  365. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll +0 -0
  366. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  367. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  368. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  369. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  370. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  371. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  372. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  373. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.Testing.Platform.resources.dll +0 -0
  374. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  375. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  376. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  377. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll +0 -0
  378. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  379. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  380. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  381. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  382. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  383. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  384. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  385. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.Testing.Platform.resources.dll +0 -0
  386. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  387. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  388. package/.artifacts/SourceGenerators.Tests/bin/net9.0/.msCoverageSourceRootsMapping_WallstopStudios.DxMessaging.SourceGenerators.Tests +0 -0
  389. package/.artifacts/SourceGenerators.Tests/bin/net9.0/CoverletSourceRootsMapping_WallstopStudios.DxMessaging.SourceGenerators.Tests +0 -0
  390. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.ApplicationInsights.dll +0 -0
  391. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.CodeAnalysis.CSharp.dll +0 -0
  392. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.CodeAnalysis.dll +0 -0
  393. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.Extensions.DependencyModel.dll +0 -0
  394. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.TestPlatform.AdapterUtilities.dll +0 -0
  395. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.TestPlatform.CommunicationUtilities.dll +0 -0
  396. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.TestPlatform.CoreUtilities.dll +0 -0
  397. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.TestPlatform.CrossPlatEngine.dll +0 -0
  398. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.TestPlatform.PlatformAbstractions.dll +0 -0
  399. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.TestPlatform.Utilities.dll +0 -0
  400. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.Testing.Extensions.MSBuild.dll +0 -0
  401. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.Testing.Extensions.Telemetry.dll +0 -0
  402. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.Testing.Extensions.TrxReport.Abstractions.dll +0 -0
  403. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.Testing.Extensions.VSTestBridge.dll +0 -0
  404. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.Testing.Platform.dll +0 -0
  405. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.VisualStudio.CodeCoverage.Shim.dll +0 -0
  406. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.VisualStudio.TestPlatform.Common.dll +0 -0
  407. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll +0 -0
  408. package/.artifacts/SourceGenerators.Tests/bin/net9.0/NUnit3.TestAdapter.dll +0 -0
  409. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Newtonsoft.Json.dll +0 -0
  410. package/.artifacts/SourceGenerators.Tests/bin/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.deps.json +0 -872
  411. package/.artifacts/SourceGenerators.Tests/bin/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  412. package/.artifacts/SourceGenerators.Tests/bin/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.runtimeconfig.json +0 -13
  413. package/.artifacts/SourceGenerators.Tests/bin/net9.0/WallstopStudios.DxMessaging.SourceGenerators.dll +0 -0
  414. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  415. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.CodeAnalysis.resources.dll +0 -0
  416. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  417. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  418. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  419. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  420. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  421. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  422. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  423. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.Testing.Platform.resources.dll +0 -0
  424. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  425. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  426. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  427. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.CodeAnalysis.resources.dll +0 -0
  428. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  429. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  430. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  431. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  432. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  433. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  434. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  435. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.Testing.Platform.resources.dll +0 -0
  436. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  437. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  438. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  439. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.CodeAnalysis.resources.dll +0 -0
  440. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  441. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  442. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  443. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  444. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  445. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  446. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  447. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.Testing.Platform.resources.dll +0 -0
  448. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  449. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  450. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  451. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.CodeAnalysis.resources.dll +0 -0
  452. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  453. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  454. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  455. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  456. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  457. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  458. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  459. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.Testing.Platform.resources.dll +0 -0
  460. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  461. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  462. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  463. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.CodeAnalysis.resources.dll +0 -0
  464. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  465. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  466. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  467. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  468. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  469. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  470. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  471. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.Testing.Platform.resources.dll +0 -0
  472. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  473. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  474. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  475. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.CodeAnalysis.resources.dll +0 -0
  476. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  477. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  478. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  479. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  480. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  481. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  482. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  483. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.Testing.Platform.resources.dll +0 -0
  484. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  485. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  486. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  487. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.CodeAnalysis.resources.dll +0 -0
  488. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  489. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  490. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  491. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  492. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  493. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  494. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  495. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.Testing.Platform.resources.dll +0 -0
  496. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  497. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  498. package/.artifacts/SourceGenerators.Tests/bin/net9.0/nunit.engine.api.dll +0 -0
  499. package/.artifacts/SourceGenerators.Tests/bin/net9.0/nunit.engine.core.dll +0 -0
  500. package/.artifacts/SourceGenerators.Tests/bin/net9.0/nunit.engine.dll +0 -0
  501. package/.artifacts/SourceGenerators.Tests/bin/net9.0/nunit.framework.dll +0 -0
  502. package/.artifacts/SourceGenerators.Tests/bin/net9.0/nunit.framework.legacy.dll +0 -0
  503. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  504. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.CodeAnalysis.resources.dll +0 -0
  505. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  506. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  507. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  508. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  509. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  510. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  511. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  512. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.Testing.Platform.resources.dll +0 -0
  513. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  514. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  515. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  516. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.CodeAnalysis.resources.dll +0 -0
  517. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  518. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  519. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  520. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  521. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  522. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  523. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  524. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.Testing.Platform.resources.dll +0 -0
  525. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  526. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  527. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  528. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.CodeAnalysis.resources.dll +0 -0
  529. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  530. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  531. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  532. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  533. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  534. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  535. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  536. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.Testing.Platform.resources.dll +0 -0
  537. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  538. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  539. package/.artifacts/SourceGenerators.Tests/bin/net9.0/testcentric.engine.metadata.dll +0 -0
  540. package/.artifacts/SourceGenerators.Tests/bin/net9.0/testhost.dll +0 -0
  541. package/.artifacts/SourceGenerators.Tests/bin/net9.0/testhost.exe +0 -0
  542. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  543. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.CodeAnalysis.resources.dll +0 -0
  544. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  545. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  546. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  547. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  548. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  549. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  550. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  551. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.Testing.Platform.resources.dll +0 -0
  552. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  553. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  554. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  555. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll +0 -0
  556. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  557. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  558. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  559. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  560. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  561. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  562. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  563. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.Testing.Platform.resources.dll +0 -0
  564. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  565. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  566. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  567. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll +0 -0
  568. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  569. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  570. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  571. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  572. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  573. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  574. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  575. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.Testing.Platform.resources.dll +0 -0
  576. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  577. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  578. package/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs +0 -4
  579. package/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/Wallstop.9ADB0525.Up2Date +0 -0
  580. package/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.AssemblyInfo.cs +0 -22
  581. package/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.GeneratedMSBuildEditorConfig.editorconfig +0 -25
  582. package/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.GlobalUsings.g.cs +0 -8
  583. package/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.csproj.FileListAbsolute.txt +0 -28
  584. package/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  585. package/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.sourcelink.json +0 -1
  586. package/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/ref/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  587. package/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/refint/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  588. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs +0 -4
  589. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/Wallstop.9ADB0525.Up2Date +0 -0
  590. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.AssemblyInfo.cs +0 -23
  591. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.GeneratedMSBuildEditorConfig.editorconfig +0 -17
  592. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.GlobalUsings.g.cs +0 -8
  593. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.csproj.BuildWithSkipAnalyzers +0 -0
  594. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.csproj.FileListAbsolute.txt +0 -84
  595. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  596. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.sourcelink.json +0 -1
  597. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/ref/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  598. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/refint/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  599. package/.artifacts/SourceGenerators.Tests/obj/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs +0 -4
  600. package/.artifacts/SourceGenerators.Tests/obj/net9.0/Wallstop.9ADB0525.Up2Date +0 -0
  601. package/.artifacts/SourceGenerators.Tests/obj/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.AssemblyInfo.cs +0 -22
  602. package/.artifacts/SourceGenerators.Tests/obj/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.GeneratedMSBuildEditorConfig.editorconfig +0 -23
  603. package/.artifacts/SourceGenerators.Tests/obj/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.GlobalUsings.g.cs +0 -8
  604. package/.artifacts/SourceGenerators.Tests/obj/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.csproj.FileListAbsolute.txt +0 -55
  605. package/.artifacts/SourceGenerators.Tests/obj/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  606. package/.artifacts/SourceGenerators.Tests/obj/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.sourcelink.json +0 -1
  607. package/.artifacts/SourceGenerators.Tests/obj/net9.0/ref/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  608. package/.artifacts/SourceGenerators.Tests/obj/net9.0/refint/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  609. package/.config/dotnet-tools.json +0 -10
  610. package/.csharpierignore +0 -1
  611. package/.csharpierrc.json +0 -3
  612. package/.cspell.json +0 -222
  613. package/.cursorrules +0 -3
  614. package/.devcontainer/.dockerignore +0 -92
  615. package/.devcontainer/Dockerfile +0 -475
  616. package/.devcontainer/devcontainer.json +0 -54
  617. package/.devcontainer/verify-tools.sh +0 -183
  618. package/.editorconfig +0 -190
  619. package/.gitattributes +0 -99
  620. package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -95
  621. package/.github/ISSUE_TEMPLATE/config.yml +0 -5
  622. package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -46
  623. package/.github/copilot-instructions.md +0 -3
  624. package/.github/dependabot.yml +0 -66
  625. package/.github/pull_request_template.md +0 -30
  626. package/.github/release-drafter.yml +0 -92
  627. package/.github/scripts/check-markdown-links.ps1 +0 -101
  628. package/.github/scripts/check_markdown_links.py +0 -187
  629. package/.github/scripts/check_markdown_url_encoding.py +0 -74
  630. package/.github/scripts/test_check_markdown_links.py +0 -545
  631. package/.github/scripts/validate_markdown_links.py +0 -194
  632. package/.github/workflows/actionlint.yml +0 -47
  633. package/.github/workflows/csharpier-autofix.yml +0 -192
  634. package/.github/workflows/deploy-docs.yml +0 -118
  635. package/.github/workflows/dotnet-tests.yml +0 -85
  636. package/.github/workflows/format-on-demand.yml +0 -309
  637. package/.github/workflows/json-format-check.yml +0 -59
  638. package/.github/workflows/lint-doc-links.yml +0 -44
  639. package/.github/workflows/markdown-json.yml +0 -63
  640. package/.github/workflows/markdown-link-text-check.yml +0 -32
  641. package/.github/workflows/markdown-link-validity.yml +0 -43
  642. package/.github/workflows/markdownlint.yml +0 -57
  643. package/.github/workflows/prettier-autofix.yml +0 -266
  644. package/.github/workflows/release-drafter.yml +0 -135
  645. package/.github/workflows/spellcheck.yml +0 -56
  646. package/.github/workflows/sync-wiki.yml +0 -139
  647. package/.github/workflows/update-dotnet-tools.yml +0 -84
  648. package/.github/workflows/validate-docs.yml +0 -196
  649. package/.github/workflows/validate-skills.yml +0 -46
  650. package/.github/workflows/yaml-format-lint.yml +0 -68
  651. package/.llm/context.md +0 -379
  652. package/.llm/skills/documentation/changelog-entry-writing.md +0 -277
  653. package/.llm/skills/documentation/changelog-management.md +0 -228
  654. package/.llm/skills/documentation/changelog-release-workflow.md +0 -249
  655. package/.llm/skills/documentation/documentation-code-samples.md +0 -262
  656. package/.llm/skills/documentation/documentation-style-guide.md +0 -203
  657. package/.llm/skills/documentation/documentation-update-workflow.md +0 -148
  658. package/.llm/skills/documentation/documentation-updates.md +0 -148
  659. package/.llm/skills/documentation/documentation-xml-docs.md +0 -190
  660. package/.llm/skills/documentation/external-url-fragment-validation.md +0 -181
  661. package/.llm/skills/documentation/github-actions-version-consistency.md +0 -203
  662. package/.llm/skills/documentation/link-quality-guidelines.md +0 -267
  663. package/.llm/skills/documentation/markdown-compatibility.md +0 -476
  664. package/.llm/skills/documentation/mermaid-theming.md +0 -326
  665. package/.llm/skills/documentation/mkdocs-navigation.md +0 -290
  666. package/.llm/skills/documentation/skill-file-sizing.md +0 -260
  667. package/.llm/skills/github-actions/git-renormalize-patterns.md +0 -231
  668. package/.llm/skills/github-actions/workflow-consistency.md +0 -346
  669. package/.llm/skills/index.md +0 -257
  670. package/.llm/skills/performance/aggressive-inlining-performance-notes.md +0 -94
  671. package/.llm/skills/performance/aggressive-inlining.md +0 -342
  672. package/.llm/skills/performance/array-pooling-usage-examples.md +0 -145
  673. package/.llm/skills/performance/array-pooling.md +0 -315
  674. package/.llm/skills/performance/cache-eviction-builder.md +0 -203
  675. package/.llm/skills/performance/cache-eviction-implementation.md +0 -340
  676. package/.llm/skills/performance/cache-eviction-policies.md +0 -176
  677. package/.llm/skills/performance/collection-pooling.md +0 -313
  678. package/.llm/skills/performance/object-pooling-anti-patterns.md +0 -144
  679. package/.llm/skills/performance/object-pooling-usage-examples.md +0 -114
  680. package/.llm/skills/performance/object-pooling-variations.md +0 -147
  681. package/.llm/skills/performance/object-pooling.md +0 -319
  682. package/.llm/skills/performance/readonly-struct-cached-hash-performance-notes.md +0 -91
  683. package/.llm/skills/performance/readonly-struct-cached-hash.md +0 -337
  684. package/.llm/skills/performance/serializable-dictionary-property-drawer.md +0 -147
  685. package/.llm/skills/performance/serializable-dictionary-usage-examples.md +0 -135
  686. package/.llm/skills/performance/serializable-dictionary.md +0 -281
  687. package/.llm/skills/performance/singleton-autoload.md +0 -111
  688. package/.llm/skills/performance/singleton-patterns.md +0 -165
  689. package/.llm/skills/performance/singleton-runtime.md +0 -187
  690. package/.llm/skills/performance/singleton-scriptableobject.md +0 -177
  691. package/.llm/skills/performance/singleton-usage-examples.md +0 -139
  692. package/.llm/skills/performance/stringbuilder-pooling.md +0 -319
  693. package/.llm/skills/performance/yield-instruction-pooling.md +0 -347
  694. package/.llm/skills/scripting/cross-platform-compatibility.md +0 -224
  695. package/.llm/skills/scripting/cross-platform-compatibility.md.meta +0 -7
  696. package/.llm/skills/scripting/javascript-code-quality.md +0 -417
  697. package/.llm/skills/scripting/powershell-best-practices.md +0 -386
  698. package/.llm/skills/scripting/regex-documentation.md +0 -461
  699. package/.llm/skills/scripting/shell-best-practices.md +0 -386
  700. package/.llm/skills/scripting/validation-patterns.md +0 -418
  701. package/.llm/skills/solid/collection-extensions-accessors.md +0 -229
  702. package/.llm/skills/solid/collection-extensions-shuffle.md +0 -144
  703. package/.llm/skills/solid/collection-extensions-type-specialization.md +0 -168
  704. package/.llm/skills/solid/collection-extensions.md +0 -144
  705. package/.llm/skills/solid/fluent-builder-pattern-templates.md +0 -117
  706. package/.llm/skills/solid/fluent-builder-pattern-usage-examples.md +0 -128
  707. package/.llm/skills/solid/fluent-builder-pattern.md +0 -322
  708. package/.llm/skills/solid/iequatable-implementation-usage.md +0 -111
  709. package/.llm/skills/solid/iequatable-implementation-variants.md +0 -201
  710. package/.llm/skills/solid/iequatable-implementation.md +0 -239
  711. package/.llm/skills/solid/try-pattern-apis-usage.md +0 -136
  712. package/.llm/skills/solid/try-pattern-apis-variants.md +0 -233
  713. package/.llm/skills/solid/try-pattern-apis.md +0 -220
  714. package/.llm/skills/specification.md +0 -468
  715. package/.llm/skills/templates/skill-template.md +0 -143
  716. package/.llm/skills/testing/comprehensive-test-coverage.md +0 -141
  717. package/.llm/skills/testing/data-driven-tests-sources.md +0 -255
  718. package/.llm/skills/testing/data-driven-tests-usage.md +0 -107
  719. package/.llm/skills/testing/data-driven-tests.md +0 -197
  720. package/.llm/skills/testing/git-workflow-robustness.md +0 -369
  721. package/.llm/skills/testing/script-test-coverage.md +0 -259
  722. package/.llm/skills/testing/script-test-coverage.md.meta +0 -7
  723. package/.llm/skills/testing/shared-test-fixtures-generic-base.md +0 -185
  724. package/.llm/skills/testing/shared-test-fixtures-reference-counting.md +0 -252
  725. package/.llm/skills/testing/shared-test-fixtures.md +0 -165
  726. package/.llm/skills/testing/test-base-class-cleanup-usage.md +0 -218
  727. package/.llm/skills/testing/test-base-class-cleanup.md +0 -323
  728. package/.llm/skills/testing/test-categories-execution.md +0 -142
  729. package/.llm/skills/testing/test-categories.md +0 -287
  730. package/.llm/skills/testing/test-code-quality.md +0 -243
  731. package/.llm/skills/testing/test-coverage-data-driven.md +0 -172
  732. package/.llm/skills/testing/test-coverage-organization-assertions.md +0 -171
  733. package/.llm/skills/testing/test-coverage-scenario-categories.md +0 -223
  734. package/.llm/skills/testing/test-coverage-unity-anti-patterns.md +0 -232
  735. package/.llm/skills/testing/test-diagnostics-patterns.md +0 -189
  736. package/.llm/skills/testing/test-diagnostics-usage.md +0 -196
  737. package/.llm/skills/testing/test-diagnostics.md +0 -247
  738. package/.llm/skills/testing/test-failure-investigation-procedure.md +0 -216
  739. package/.llm/skills/testing/test-failure-investigation-root-causes.md +0 -186
  740. package/.llm/skills/testing/test-failure-investigation.md +0 -119
  741. package/.llm/skills/testing/test-invalid-skill.md +0 -26
  742. package/.llm/skills/testing/test-production-code.md +0 -348
  743. package/.lychee.toml +0 -30
  744. package/.markdownlint-cli2.jsonc +0 -17
  745. package/.markdownlint.json +0 -23
  746. package/.markdownlint.jsonc +0 -23
  747. package/.markdownlintignore +0 -7
  748. package/.pre-commit-config.yaml +0 -165
  749. package/.prettierignore +0 -21
  750. package/.prettierrc.json +0 -20
  751. package/.vs/ProjectEvaluation/com.wallstop-studios.dxmessaging.metadata.v10.bin +0 -0
  752. package/.vs/ProjectEvaluation/com.wallstop-studios.dxmessaging.projects.v10.bin +0 -0
  753. package/.vs/ProjectEvaluation/com.wallstop-studios.dxmessaging.strings.v10.bin +0 -0
  754. package/.vs/ProjectSettings.json +0 -3
  755. package/.vs/VSWorkspaceState.json +0 -9
  756. package/.vs/com.wallstop-studios.dxmessaging/CopilotIndices/17.14.1347.20289/CodeChunks.db +0 -0
  757. package/.vs/com.wallstop-studios.dxmessaging/CopilotIndices/17.14.1347.20289/SemanticSymbols.db +0 -0
  758. package/.vs/com.wallstop-studios.dxmessaging/DesignTimeBuild/.dtbcache.v2 +0 -0
  759. package/.vs/com.wallstop-studios.dxmessaging/FileContentIndex/41b4588f-fa0f-484b-a29b-733b6ce84c26.vsidx +0 -0
  760. package/.vs/com.wallstop-studios.dxmessaging/FileContentIndex/9a73875f-5693-4296-95fd-0672bf61c5ac.vsidx +0 -0
  761. package/.vs/com.wallstop-studios.dxmessaging/FileContentIndex/fd44ab3e-7015-4c20-918a-a0a916be8934.vsidx +0 -0
  762. package/.vs/com.wallstop-studios.dxmessaging/v17/.futdcache.v2 +0 -0
  763. package/.vs/com.wallstop-studios.dxmessaging/v17/.wsuo +0 -0
  764. package/.vs/com.wallstop-studios.dxmessaging/v17/DocumentLayout.backup.json +0 -82
  765. package/.vs/com.wallstop-studios.dxmessaging/v17/DocumentLayout.json +0 -82
  766. package/.vs/com.wallstop-studios.dxmessaging/v17/TestStore/0/000.testlog +0 -0
  767. package/.vs/com.wallstop-studios.dxmessaging/v17/TestStore/0/testlog.manifest +0 -0
  768. package/.vs/com.wallstop-studios.dxmessaging/v17/csharpier.json +0 -1
  769. package/.vs/com.wallstop-studios.dxmessaging/v18/.futdcache.v2 +0 -0
  770. package/.vs/com.wallstop-studios.dxmessaging/v18/DocumentLayout.backup.json +0 -86
  771. package/.vs/com.wallstop-studios.dxmessaging/v18/DocumentLayout.json +0 -86
  772. package/.vs/slnx.sqlite +0 -0
  773. package/.yamllint.yaml +0 -31
  774. package/AGENTS.md +0 -3
  775. package/AGENTS.md.meta +0 -7
  776. package/CLAUDE.md +0 -3
  777. package/CLAUDE.md.meta +0 -7
  778. package/CONTRIBUTING.md +0 -43
  779. package/CONTRIBUTING.md.meta +0 -7
  780. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/.vs/WallstopStudios.DxMessaging.SourceGenerators/CopilotIndices/17.14.1231.31060/CodeChunks.db +0 -0
  781. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/.vs/WallstopStudios.DxMessaging.SourceGenerators/CopilotIndices/17.14.1231.31060/SemanticSymbols.db +0 -0
  782. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/.vs/WallstopStudios.DxMessaging.SourceGenerators/DesignTimeBuild/.dtbcache.v2 +0 -0
  783. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/.vs/WallstopStudios.DxMessaging.SourceGenerators/FileContentIndex/c90afd9b-d899-4546-bd92-ab874e448437.vsidx +0 -0
  784. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/.vs/WallstopStudios.DxMessaging.SourceGenerators/v17/.futdcache.v2 +0 -0
  785. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests/DocsSnippetCompilationTests.cs +0 -544
  786. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests/DocsSnippetCompilationTests.cs.meta +0 -11
  787. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests/DxAutoConstructorGeneratorDiagnosticsTests.cs +0 -69
  788. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests/DxAutoConstructorGeneratorDiagnosticsTests.cs.meta +0 -11
  789. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests/DxMessageIdGeneratorDiagnosticsTests.cs +0 -66
  790. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests/DxMessageIdGeneratorDiagnosticsTests.cs.meta +0 -11
  791. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests/GeneratorTestUtilities.cs +0 -155
  792. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests/GeneratorTestUtilities.cs.meta +0 -11
  793. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests/WallstopStudios.DxMessaging.SourceGenerators.Tests.csproj +0 -20
  794. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests/WallstopStudios.DxMessaging.SourceGenerators.Tests.csproj.meta +0 -7
  795. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests.meta +0 -8
  796. package/Tests/Editor/MessagingComponentEditorHarnessTests.cs +0 -243
  797. package/Tests/Editor/MessagingComponentEditorHarnessTests.cs.meta +0 -3
  798. package/Tests/Editor/MessagingComponentSerializationTests.cs +0 -129
  799. package/Tests/Editor/MessagingComponentSerializationTests.cs.meta +0 -3
  800. package/Tests/Editor/WallstopStudios.DxMessaging.Tests.Editor.asmdef +0 -19
  801. package/Tests/Editor/WallstopStudios.DxMessaging.Tests.Editor.asmdef.meta +0 -3
  802. package/Tests/Editor.meta +0 -3
  803. package/Tests/Runtime/Benchmarks/BenchmarkSession.cs +0 -450
  804. package/Tests/Runtime/Benchmarks/BenchmarkSession.cs.meta +0 -11
  805. package/Tests/Runtime/Benchmarks/BenchmarkTestBase.cs +0 -97
  806. package/Tests/Runtime/Benchmarks/BenchmarkTestBase.cs.meta +0 -11
  807. package/Tests/Runtime/Benchmarks/ComparisonPerformanceTests.cs +0 -398
  808. package/Tests/Runtime/Benchmarks/ComparisonPerformanceTests.cs.meta +0 -11
  809. package/Tests/Runtime/Benchmarks/PerformanceTests.cs +0 -623
  810. package/Tests/Runtime/Benchmarks/PerformanceTests.cs.meta +0 -11
  811. package/Tests/Runtime/Benchmarks/ProviderResolutionBenchmarks.cs +0 -142
  812. package/Tests/Runtime/Benchmarks/ProviderResolutionBenchmarks.cs.meta +0 -12
  813. package/Tests/Runtime/Benchmarks/WallstopStudios.DxMessaging.Tests.Runtime.Benchmarks.asmdef +0 -45
  814. package/Tests/Runtime/Benchmarks/WallstopStudios.DxMessaging.Tests.Runtime.Benchmarks.asmdef.meta +0 -7
  815. package/Tests/Runtime/Benchmarks.meta +0 -8
  816. package/Tests/Runtime/Core/AlternateBusTests.cs +0 -85
  817. package/Tests/Runtime/Core/AlternateBusTests.cs.meta +0 -11
  818. package/Tests/Runtime/Core/BroadcastTests.cs +0 -914
  819. package/Tests/Runtime/Core/BroadcastTests.cs.meta +0 -11
  820. package/Tests/Runtime/Core/CyclicBufferTests.cs +0 -343
  821. package/Tests/Runtime/Core/CyclicBufferTests.cs.meta +0 -11
  822. package/Tests/Runtime/Core/DefaultBusFallbackTests.cs +0 -336
  823. package/Tests/Runtime/Core/DefaultBusFallbackTests.cs.meta +0 -11
  824. package/Tests/Runtime/Core/DiagnosticsTests.cs +0 -193
  825. package/Tests/Runtime/Core/DiagnosticsTests.cs.meta +0 -11
  826. package/Tests/Runtime/Core/DxMessagingStaticStateTests.cs +0 -69
  827. package/Tests/Runtime/Core/DxMessagingStaticStateTests.cs.meta +0 -11
  828. package/Tests/Runtime/Core/EdgeCaseTests.cs +0 -582
  829. package/Tests/Runtime/Core/EdgeCaseTests.cs.meta +0 -11
  830. package/Tests/Runtime/Core/EnablementTests.cs +0 -72
  831. package/Tests/Runtime/Core/EnablementTests.cs.meta +0 -3
  832. package/Tests/Runtime/Core/Extensions/MessageBusExtensionsTests.cs +0 -259
  833. package/Tests/Runtime/Core/Extensions/MessageBusExtensionsTests.cs.meta +0 -11
  834. package/Tests/Runtime/Core/Extensions/MessageExtensionsProviderTests.cs +0 -289
  835. package/Tests/Runtime/Core/Extensions/MessageExtensionsProviderTests.cs.meta +0 -11
  836. package/Tests/Runtime/Core/Extensions.meta +0 -8
  837. package/Tests/Runtime/Core/GenericMessageTests.cs +0 -50
  838. package/Tests/Runtime/Core/GenericMessageTests.cs.meta +0 -3
  839. package/Tests/Runtime/Core/GlobalAcceptAllTests.cs +0 -193
  840. package/Tests/Runtime/Core/GlobalAcceptAllTests.cs.meta +0 -11
  841. package/Tests/Runtime/Core/IntegrationShimSmokeTests.cs +0 -57
  842. package/Tests/Runtime/Core/IntegrationShimSmokeTests.cs.meta +0 -11
  843. package/Tests/Runtime/Core/InterceptorCancellationTests.cs +0 -173
  844. package/Tests/Runtime/Core/InterceptorCancellationTests.cs.meta +0 -11
  845. package/Tests/Runtime/Core/LifecycleTests.cs +0 -75
  846. package/Tests/Runtime/Core/LifecycleTests.cs.meta +0 -11
  847. package/Tests/Runtime/Core/MessageEmissionDataTests.cs +0 -70
  848. package/Tests/Runtime/Core/MessageEmissionDataTests.cs.meta +0 -11
  849. package/Tests/Runtime/Core/MessageHandlerGlobalBusTests.cs +0 -219
  850. package/Tests/Runtime/Core/MessageHandlerGlobalBusTests.cs.meta +0 -11
  851. package/Tests/Runtime/Core/MessageRegistrationBuilderTests.cs +0 -204
  852. package/Tests/Runtime/Core/MessageRegistrationBuilderTests.cs.meta +0 -11
  853. package/Tests/Runtime/Core/MessagingComponentLifecycleTests.cs +0 -92
  854. package/Tests/Runtime/Core/MessagingComponentLifecycleTests.cs.meta +0 -11
  855. package/Tests/Runtime/Core/MessagingTestBase.cs +0 -211
  856. package/Tests/Runtime/Core/MessagingTestBase.cs.meta +0 -11
  857. package/Tests/Runtime/Core/MutationDedupeTests.cs +0 -101
  858. package/Tests/Runtime/Core/MutationDedupeTests.cs.meta +0 -11
  859. package/Tests/Runtime/Core/MutationDestructionTests.cs +0 -437
  860. package/Tests/Runtime/Core/MutationDestructionTests.cs.meta +0 -11
  861. package/Tests/Runtime/Core/MutationDuringEmissionTests.cs +0 -2141
  862. package/Tests/Runtime/Core/MutationDuringEmissionTests.cs.meta +0 -11
  863. package/Tests/Runtime/Core/MutationGlobalAddTests.cs +0 -102
  864. package/Tests/Runtime/Core/MutationGlobalAddTests.cs.meta +0 -11
  865. package/Tests/Runtime/Core/MutationHighVolumeStressTests.cs +0 -512
  866. package/Tests/Runtime/Core/MutationHighVolumeStressTests.cs.meta +0 -11
  867. package/Tests/Runtime/Core/MutationInterceptorTests.cs +0 -190
  868. package/Tests/Runtime/Core/MutationInterceptorTests.cs.meta +0 -11
  869. package/Tests/Runtime/Core/MutationPostProcessorAcrossHandlersTests.cs +0 -109
  870. package/Tests/Runtime/Core/MutationPostProcessorAcrossHandlersTests.cs.meta +0 -11
  871. package/Tests/Runtime/Core/MutationPostProcessorMoreTests.cs +0 -117
  872. package/Tests/Runtime/Core/MutationPostProcessorMoreTests.cs.meta +0 -11
  873. package/Tests/Runtime/Core/MutationPriorityTests.cs +0 -119
  874. package/Tests/Runtime/Core/MutationPriorityTests.cs.meta +0 -11
  875. package/Tests/Runtime/Core/NominalTests.cs +0 -1738
  876. package/Tests/Runtime/Core/NominalTests.cs.meta +0 -11
  877. package/Tests/Runtime/Core/OrderingManyRegistrationsTests.cs +0 -683
  878. package/Tests/Runtime/Core/OrderingManyRegistrationsTests.cs.meta +0 -11
  879. package/Tests/Runtime/Core/OrderingTests.cs +0 -1932
  880. package/Tests/Runtime/Core/OrderingTests.cs.meta +0 -11
  881. package/Tests/Runtime/Core/OverDeregistrationTests.cs +0 -128
  882. package/Tests/Runtime/Core/OverDeregistrationTests.cs.meta +0 -11
  883. package/Tests/Runtime/Core/PostProcessorTests.cs +0 -1248
  884. package/Tests/Runtime/Core/PostProcessorTests.cs.meta +0 -11
  885. package/Tests/Runtime/Core/ReflexiveErrorTests.cs +0 -43
  886. package/Tests/Runtime/Core/ReflexiveErrorTests.cs.meta +0 -11
  887. package/Tests/Runtime/Core/ReflexiveMessageWarningTests.cs +0 -89
  888. package/Tests/Runtime/Core/ReflexiveMessageWarningTests.cs.meta +0 -11
  889. package/Tests/Runtime/Core/ReflexiveTests.cs +0 -173
  890. package/Tests/Runtime/Core/ReflexiveTests.cs.meta +0 -11
  891. package/Tests/Runtime/Core/RegistrationTests.cs +0 -1269
  892. package/Tests/Runtime/Core/RegistrationTests.cs.meta +0 -11
  893. package/Tests/Runtime/Core/SourceGeneratorNestedTests.cs +0 -116
  894. package/Tests/Runtime/Core/SourceGeneratorNestedTests.cs.meta +0 -11
  895. package/Tests/Runtime/Core/StringShorthandTests.cs +0 -101
  896. package/Tests/Runtime/Core/StringShorthandTests.cs.meta +0 -12
  897. package/Tests/Runtime/Core/TargetedTests.cs +0 -905
  898. package/Tests/Runtime/Core/TargetedTests.cs.meta +0 -11
  899. package/Tests/Runtime/Core/TypedShorthandTests.cs +0 -233
  900. package/Tests/Runtime/Core/TypedShorthandTests.cs.meta +0 -12
  901. package/Tests/Runtime/Core/UntargetedEquivalenceTests.cs +0 -173
  902. package/Tests/Runtime/Core/UntargetedEquivalenceTests.cs.meta +0 -12
  903. package/Tests/Runtime/Core/UntargetedPrefreezeTests.cs +0 -50
  904. package/Tests/Runtime/Core/UntargetedPrefreezeTests.cs.meta +0 -11
  905. package/Tests/Runtime/Core/UntargetedTests.cs +0 -280
  906. package/Tests/Runtime/Core/UntargetedTests.cs.meta +0 -11
  907. package/Tests/Runtime/Core.meta +0 -8
  908. package/Tests/Runtime/Integrations/Reflex/ReflexIntegrationTests.cs +0 -165
  909. package/Tests/Runtime/Integrations/Reflex/ReflexIntegrationTests.cs.meta +0 -11
  910. package/Tests/Runtime/Integrations/Reflex/Resources/ReflexSettings.asset +0 -16
  911. package/Tests/Runtime/Integrations/Reflex/Resources/ReflexSettings.asset.meta +0 -8
  912. package/Tests/Runtime/Integrations/Reflex/Resources.meta +0 -8
  913. package/Tests/Runtime/Integrations/Reflex/WallstopStudios.DxMessaging.Tests.Runtime.Reflex.asmdef +0 -27
  914. package/Tests/Runtime/Integrations/Reflex/WallstopStudios.DxMessaging.Tests.Runtime.Reflex.asmdef.meta +0 -7
  915. package/Tests/Runtime/Integrations/Reflex.meta +0 -8
  916. package/Tests/Runtime/Integrations/VContainer/VContainerIntegrationTests.cs +0 -143
  917. package/Tests/Runtime/Integrations/VContainer/VContainerIntegrationTests.cs.meta +0 -11
  918. package/Tests/Runtime/Integrations/VContainer/WallstopStudios.DxMessaging.Tests.Runtime.VContainer.asmdef +0 -37
  919. package/Tests/Runtime/Integrations/VContainer/WallstopStudios.DxMessaging.Tests.Runtime.VContainer.asmdef.meta +0 -7
  920. package/Tests/Runtime/Integrations/VContainer.meta +0 -8
  921. package/Tests/Runtime/Integrations/Zenject/WallstopStudios.DxMessaging.Tests.Runtime.Zenject.asmdef +0 -37
  922. package/Tests/Runtime/Integrations/Zenject/WallstopStudios.DxMessaging.Tests.Runtime.Zenject.asmdef.meta +0 -7
  923. package/Tests/Runtime/Integrations/Zenject/ZenjectIntegrationTests.cs +0 -142
  924. package/Tests/Runtime/Integrations/Zenject/ZenjectIntegrationTests.cs.meta +0 -11
  925. package/Tests/Runtime/Integrations/Zenject.meta +0 -8
  926. package/Tests/Runtime/Integrations.meta +0 -8
  927. package/Tests/Runtime/Scripts/Components/EmptyMessageAwareComponent.cs +0 -9
  928. package/Tests/Runtime/Scripts/Components/EmptyMessageAwareComponent.cs.meta +0 -11
  929. package/Tests/Runtime/Scripts/Components/GenericMessageAwareComponent.cs +0 -21
  930. package/Tests/Runtime/Scripts/Components/GenericMessageAwareComponent.cs.meta +0 -3
  931. package/Tests/Runtime/Scripts/Components/ManualListenerComponent.cs +0 -25
  932. package/Tests/Runtime/Scripts/Components/ManualListenerComponent.cs.meta +0 -11
  933. package/Tests/Runtime/Scripts/Components/ReflexiveReceiverComponent.cs +0 -17
  934. package/Tests/Runtime/Scripts/Components/ReflexiveReceiverComponent.cs.meta +0 -11
  935. package/Tests/Runtime/Scripts/Components/ShorthandTargetedBroadcastComponent.cs +0 -46
  936. package/Tests/Runtime/Scripts/Components/ShorthandTargetedBroadcastComponent.cs.meta +0 -12
  937. package/Tests/Runtime/Scripts/Components/SimpleMessageAwareComponent.cs +0 -198
  938. package/Tests/Runtime/Scripts/Components/SimpleMessageAwareComponent.cs.meta +0 -11
  939. package/Tests/Runtime/Scripts/Components/StringMessageAwareComponent.cs +0 -75
  940. package/Tests/Runtime/Scripts/Components/StringMessageAwareComponent.cs.meta +0 -12
  941. package/Tests/Runtime/Scripts/Components/UntargetedClassReceiverComponent.cs +0 -16
  942. package/Tests/Runtime/Scripts/Components/UntargetedClassReceiverComponent.cs.meta +0 -12
  943. package/Tests/Runtime/Scripts/Components/UntargetedReceiverComponent.cs +0 -16
  944. package/Tests/Runtime/Scripts/Components/UntargetedReceiverComponent.cs.meta +0 -12
  945. package/Tests/Runtime/Scripts/Components.meta +0 -8
  946. package/Tests/Runtime/Scripts/Messages/ClassUntargetedMessage.cs +0 -17
  947. package/Tests/Runtime/Scripts/Messages/ClassUntargetedMessage.cs.meta +0 -12
  948. package/Tests/Runtime/Scripts/Messages/ComplexTargetedMessage.cs +0 -29
  949. package/Tests/Runtime/Scripts/Messages/ComplexTargetedMessage.cs.meta +0 -11
  950. package/Tests/Runtime/Scripts/Messages/GenericUntargetedMessage.cs +0 -7
  951. package/Tests/Runtime/Scripts/Messages/GenericUntargetedMessage.cs.meta +0 -3
  952. package/Tests/Runtime/Scripts/Messages/SimpleBroadcastMessage.cs +0 -7
  953. package/Tests/Runtime/Scripts/Messages/SimpleBroadcastMessage.cs.meta +0 -11
  954. package/Tests/Runtime/Scripts/Messages/SimpleTargetedMessage.cs +0 -7
  955. package/Tests/Runtime/Scripts/Messages/SimpleTargetedMessage.cs.meta +0 -11
  956. package/Tests/Runtime/Scripts/Messages/SimpleUntargetedMessage.cs +0 -7
  957. package/Tests/Runtime/Scripts/Messages/SimpleUntargetedMessage.cs.meta +0 -11
  958. package/Tests/Runtime/Scripts/Messages.meta +0 -8
  959. package/Tests/Runtime/Scripts.meta +0 -8
  960. package/Tests/Runtime/TestUtilities/UnityFixtureBase.cs +0 -67
  961. package/Tests/Runtime/TestUtilities/UnityFixtureBase.cs.meta +0 -12
  962. package/Tests/Runtime/TestUtilities.meta +0 -9
  963. package/Tests/Runtime/Unity/MessageBusProviderAssetTests.cs +0 -60
  964. package/Tests/Runtime/Unity/MessageBusProviderAssetTests.cs.meta +0 -11
  965. package/Tests/Runtime/Unity/MessageBusProviderHandleTests.cs +0 -191
  966. package/Tests/Runtime/Unity/MessageBusProviderHandleTests.cs.meta +0 -12
  967. package/Tests/Runtime/Unity/MessagingComponentInstallerSceneTests.cs +0 -109
  968. package/Tests/Runtime/Unity/MessagingComponentInstallerSceneTests.cs.meta +0 -11
  969. package/Tests/Runtime/Unity/MessagingComponentProviderIntegrationTests.cs +0 -352
  970. package/Tests/Runtime/Unity/MessagingComponentProviderIntegrationTests.cs.meta +0 -12
  971. package/Tests/Runtime/Unity.meta +0 -9
  972. package/Tests/Runtime/WallstopStudios.DxMessaging.Tests.Runtime.asmdef +0 -21
  973. package/Tests/Runtime/WallstopStudios.DxMessaging.Tests.Runtime.asmdef.meta +0 -7
  974. package/Tests/Runtime.meta +0 -8
  975. package/Tests.meta +0 -8
  976. package/coverage/clover.xml +0 -219
  977. package/coverage/clover.xml.meta +0 -7
  978. package/coverage/coverage-final.json +0 -2
  979. package/coverage/coverage-final.json.meta +0 -7
  980. package/coverage/lcov-report/base.css +0 -224
  981. package/coverage/lcov-report/base.css.meta +0 -7
  982. package/coverage/lcov-report/block-navigation.js +0 -87
  983. package/coverage/lcov-report/block-navigation.js.meta +0 -7
  984. package/coverage/lcov-report/favicon.png +0 -0
  985. package/coverage/lcov-report/favicon.png.meta +0 -127
  986. package/coverage/lcov-report/index.html +0 -116
  987. package/coverage/lcov-report/index.html.meta +0 -7
  988. package/coverage/lcov-report/prettify.css +0 -1
  989. package/coverage/lcov-report/prettify.css.meta +0 -7
  990. package/coverage/lcov-report/prettify.js +0 -2
  991. package/coverage/lcov-report/prettify.js.meta +0 -7
  992. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  993. package/coverage/lcov-report/sort-arrow-sprite.png.meta +0 -127
  994. package/coverage/lcov-report/sorter.js +0 -210
  995. package/coverage/lcov-report/sorter.js.meta +0 -7
  996. package/coverage/lcov-report/transform-docs-to-wiki.js.html +0 -1312
  997. package/coverage/lcov-report/transform-docs-to-wiki.js.html.meta +0 -7
  998. package/coverage/lcov-report/vendor.meta +0 -8
  999. package/coverage/lcov-report.meta +0 -8
  1000. package/coverage/lcov.info +0 -365
  1001. package/coverage/lcov.info.meta +0 -7
  1002. package/docs/advanced/emit-shorthands.md +0 -468
  1003. package/docs/advanced/emit-shorthands.md.meta +0 -7
  1004. package/docs/advanced/message-bus-providers.md +0 -497
  1005. package/docs/advanced/message-bus-providers.md.meta +0 -7
  1006. package/docs/advanced/registration-builders.md +0 -444
  1007. package/docs/advanced/registration-builders.md.meta +0 -7
  1008. package/docs/advanced/runtime-configuration.md +0 -408
  1009. package/docs/advanced/runtime-configuration.md.meta +0 -7
  1010. package/docs/advanced/string-messages.md +0 -71
  1011. package/docs/advanced/string-messages.md.meta +0 -7
  1012. package/docs/advanced.meta +0 -8
  1013. package/docs/architecture/comparisons.md +0 -1684
  1014. package/docs/architecture/comparisons.md.meta +0 -7
  1015. package/docs/architecture/design-and-architecture.md +0 -142
  1016. package/docs/architecture/design-and-architecture.md.meta +0 -7
  1017. package/docs/architecture/performance.md +0 -53
  1018. package/docs/architecture/performance.md.meta +0 -7
  1019. package/docs/architecture.meta +0 -8
  1020. package/docs/concepts/index.md +0 -37
  1021. package/docs/concepts/index.md.meta +0 -7
  1022. package/docs/concepts/interceptors-and-ordering.md +0 -522
  1023. package/docs/concepts/interceptors-and-ordering.md.meta +0 -7
  1024. package/docs/concepts/listening-patterns.md +0 -266
  1025. package/docs/concepts/listening-patterns.md.meta +0 -7
  1026. package/docs/concepts/mental-model.md +0 -390
  1027. package/docs/concepts/mental-model.md.meta +0 -7
  1028. package/docs/concepts/message-types.md +0 -218
  1029. package/docs/concepts/message-types.md.meta +0 -7
  1030. package/docs/concepts/targeting-and-context.md +0 -451
  1031. package/docs/concepts/targeting-and-context.md.meta +0 -7
  1032. package/docs/concepts.meta +0 -8
  1033. package/docs/examples/end-to-end-scene-transitions.md +0 -130
  1034. package/docs/examples/end-to-end-scene-transitions.md.meta +0 -7
  1035. package/docs/examples/end-to-end.md +0 -139
  1036. package/docs/examples/end-to-end.md.meta +0 -7
  1037. package/docs/examples.meta +0 -8
  1038. package/docs/getting-started/getting-started.md +0 -203
  1039. package/docs/getting-started/getting-started.md.meta +0 -7
  1040. package/docs/getting-started/index.md +0 -317
  1041. package/docs/getting-started/index.md.meta +0 -7
  1042. package/docs/getting-started/install.md +0 -89
  1043. package/docs/getting-started/install.md.meta +0 -7
  1044. package/docs/getting-started/overview.md +0 -159
  1045. package/docs/getting-started/overview.md.meta +0 -7
  1046. package/docs/getting-started/quick-start.md +0 -175
  1047. package/docs/getting-started/quick-start.md.meta +0 -7
  1048. package/docs/getting-started/visual-guide.md +0 -605
  1049. package/docs/getting-started/visual-guide.md.meta +0 -7
  1050. package/docs/getting-started.meta +0 -8
  1051. package/docs/guides/advanced.md +0 -261
  1052. package/docs/guides/advanced.md.meta +0 -7
  1053. package/docs/guides/diagnostics.md +0 -300
  1054. package/docs/guides/diagnostics.md.meta +0 -7
  1055. package/docs/guides/migration-guide.md +0 -513
  1056. package/docs/guides/migration-guide.md.meta +0 -7
  1057. package/docs/guides/patterns.md +0 -1080
  1058. package/docs/guides/patterns.md.meta +0 -7
  1059. package/docs/guides/testing.md +0 -243
  1060. package/docs/guides/testing.md.meta +0 -7
  1061. package/docs/guides/unity-integration.md +0 -139
  1062. package/docs/guides/unity-integration.md.meta +0 -7
  1063. package/docs/guides.meta +0 -8
  1064. package/docs/hooks.py +0 -177
  1065. package/docs/hooks.py.meta +0 -7
  1066. package/docs/images/DxMessaging-banner.svg +0 -119
  1067. package/docs/images/DxMessaging-banner.svg.meta +0 -7
  1068. package/docs/images.meta +0 -8
  1069. package/docs/index.md +0 -61
  1070. package/docs/index.md.meta +0 -7
  1071. package/docs/integrations/index.md +0 -66
  1072. package/docs/integrations/index.md.meta +0 -7
  1073. package/docs/integrations/reflex.md +0 -317
  1074. package/docs/integrations/reflex.md.meta +0 -7
  1075. package/docs/integrations/vcontainer.md +0 -333
  1076. package/docs/integrations/vcontainer.md.meta +0 -7
  1077. package/docs/integrations/zenject.md +0 -333
  1078. package/docs/integrations/zenject.md.meta +0 -7
  1079. package/docs/integrations.meta +0 -8
  1080. package/docs/javascripts/csharp-highlight.js +0 -246
  1081. package/docs/javascripts/csharp-highlight.js.meta +0 -7
  1082. package/docs/javascripts/mermaid-config.js +0 -387
  1083. package/docs/javascripts/mermaid-config.js.meta +0 -7
  1084. package/docs/javascripts.meta +0 -8
  1085. package/docs/reference/compatibility.md +0 -44
  1086. package/docs/reference/compatibility.md.meta +0 -7
  1087. package/docs/reference/faq.md +0 -57
  1088. package/docs/reference/faq.md.meta +0 -7
  1089. package/docs/reference/glossary.md +0 -267
  1090. package/docs/reference/glossary.md.meta +0 -7
  1091. package/docs/reference/helpers.md +0 -989
  1092. package/docs/reference/helpers.md.meta +0 -7
  1093. package/docs/reference/quick-reference.md +0 -269
  1094. package/docs/reference/quick-reference.md.meta +0 -7
  1095. package/docs/reference/reference.md +0 -365
  1096. package/docs/reference/reference.md.meta +0 -7
  1097. package/docs/reference/troubleshooting.md +0 -63
  1098. package/docs/reference/troubleshooting.md.meta +0 -7
  1099. package/docs/reference.meta +0 -8
  1100. package/docs/stylesheets/extra.css +0 -485
  1101. package/docs/stylesheets/extra.css.meta +0 -7
  1102. package/docs/stylesheets.meta +0 -8
  1103. package/docs.meta +0 -8
  1104. package/mkdocs.yml +0 -200
  1105. package/mkdocs.yml.meta +0 -7
  1106. package/requirements-docs.txt +0 -23
  1107. package/requirements-docs.txt.meta +0 -7
  1108. package/scripts/__tests__/generate-skills-index.test.js +0 -397
  1109. package/scripts/__tests__/generate-skills-index.test.js.meta +0 -7
  1110. package/scripts/__tests__/mermaid-config.test.js +0 -467
  1111. package/scripts/__tests__/mermaid-config.test.js.meta +0 -7
  1112. package/scripts/__tests__/sync-banner-version.test.js +0 -606
  1113. package/scripts/__tests__/sync-banner-version.test.js.meta +0 -7
  1114. package/scripts/__tests__/validate-skills-optional-fields.test.js +0 -1474
  1115. package/scripts/__tests__/validate-skills-optional-fields.test.js.meta +0 -7
  1116. package/scripts/__tests__/validate-skills-required-fields.test.js +0 -188
  1117. package/scripts/__tests__/validate-skills-required-fields.test.js.meta +0 -7
  1118. package/scripts/__tests__/validate-skills-tags.test.js +0 -353
  1119. package/scripts/__tests__/validate-skills-tags.test.js.meta +0 -7
  1120. package/scripts/__tests__/validate-workflows.test.js +0 -188
  1121. package/scripts/__tests__/validate-workflows.test.js.meta +0 -7
  1122. package/scripts/__tests__.meta +0 -8
  1123. package/scripts/check-eol.js +0 -365
  1124. package/scripts/check-eol.js.meta +0 -7
  1125. package/scripts/check-eol.ps1 +0 -179
  1126. package/scripts/check-eol.ps1.meta +0 -8
  1127. package/scripts/fix-eol.js +0 -164
  1128. package/scripts/fix-eol.js.meta +0 -7
  1129. package/scripts/fix-markdown-file.js +0 -64
  1130. package/scripts/fix-markdown-file.js.meta +0 -7
  1131. package/scripts/fix-md036-headings.js +0 -71
  1132. package/scripts/fix-md036-headings.js.meta +0 -7
  1133. package/scripts/generate-skills-index.js +0 -597
  1134. package/scripts/generate-skills-index.js.meta +0 -7
  1135. package/scripts/generate-skills-index.ps1 +0 -38
  1136. package/scripts/generate-skills-index.ps1.meta +0 -7
  1137. package/scripts/hooks/pre-commit +0 -59
  1138. package/scripts/hooks/pre-commit.meta +0 -7
  1139. package/scripts/hooks.meta +0 -8
  1140. package/scripts/lint-doc-links.ps1 +0 -25
  1141. package/scripts/lint-doc-links.ps1.meta +0 -7
  1142. package/scripts/sync-banner-version.ps1 +0 -133
  1143. package/scripts/sync-banner-version.ps1.meta +0 -7
  1144. package/scripts/sync-banner-version.sh +0 -16
  1145. package/scripts/sync-banner-version.sh.meta +0 -7
  1146. package/scripts/validate-skills.js +0 -757
  1147. package/scripts/validate-skills.js.meta +0 -7
  1148. package/scripts/validate-workflows.js +0 -272
  1149. package/scripts/validate-workflows.js.meta +0 -7
  1150. package/scripts/wiki/__tests__/transform.test.js +0 -380
  1151. package/scripts/wiki/__tests__/transform.test.js.meta +0 -7
  1152. package/scripts/wiki/__tests__.meta +0 -7
  1153. package/scripts/wiki/generate-wiki-sidebar.js +0 -122
  1154. package/scripts/wiki/generate-wiki-sidebar.js.meta +0 -14
  1155. package/scripts/wiki/transform-docs-to-wiki.js +0 -409
  1156. package/scripts/wiki/transform-docs-to-wiki.js.meta +0 -7
  1157. package/scripts/wiki.meta +0 -8
  1158. package/scripts.meta +0 -8
  1159. package/site/404.html +0 -1
  1160. package/site/404.html.meta +0 -7
  1161. package/site/advanced/emit-shorthands/index.html +0 -212
  1162. package/site/advanced/emit-shorthands/index.html.meta +0 -7
  1163. package/site/advanced/emit-shorthands.meta +0 -8
  1164. package/site/advanced/message-bus-providers/index.html +0 -241
  1165. package/site/advanced/message-bus-providers/index.html.meta +0 -7
  1166. package/site/advanced/message-bus-providers.meta +0 -8
  1167. package/site/advanced/registration-builders/index.html +0 -228
  1168. package/site/advanced/registration-builders/index.html.meta +0 -7
  1169. package/site/advanced/registration-builders.meta +0 -8
  1170. package/site/advanced/runtime-configuration/index.html +0 -196
  1171. package/site/advanced/runtime-configuration/index.html.meta +0 -7
  1172. package/site/advanced/runtime-configuration.meta +0 -8
  1173. package/site/advanced/string-messages/index.html +0 -29
  1174. package/site/advanced/string-messages/index.html.meta +0 -7
  1175. package/site/advanced/string-messages.meta +0 -8
  1176. package/site/advanced.meta +0 -8
  1177. package/site/architecture/comparisons/index.html +0 -356
  1178. package/site/architecture/comparisons/index.html.meta +0 -7
  1179. package/site/architecture/comparisons.meta +0 -8
  1180. package/site/architecture/design-and-architecture/index.html +0 -34
  1181. package/site/architecture/design-and-architecture/index.html.meta +0 -7
  1182. package/site/architecture/design-and-architecture.meta +0 -8
  1183. package/site/architecture/performance/index.html +0 -1
  1184. package/site/architecture/performance/index.html.meta +0 -7
  1185. package/site/architecture/performance.meta +0 -8
  1186. package/site/architecture.meta +0 -8
  1187. package/site/assets/images/favicon.png +0 -0
  1188. package/site/assets/images/favicon.png.meta +0 -127
  1189. package/site/assets/images.meta +0 -8
  1190. package/site/assets/javascripts/bundle.79ae519e.min.js +0 -16
  1191. package/site/assets/javascripts/bundle.79ae519e.min.js.map +0 -7
  1192. package/site/assets/javascripts/bundle.79ae519e.min.js.map.meta +0 -7
  1193. package/site/assets/javascripts/bundle.79ae519e.min.js.meta +0 -7
  1194. package/site/assets/javascripts/lunr/min/lunr.ar.min.js +0 -1
  1195. package/site/assets/javascripts/lunr/min/lunr.ar.min.js.meta +0 -7
  1196. package/site/assets/javascripts/lunr/min/lunr.da.min.js +0 -18
  1197. package/site/assets/javascripts/lunr/min/lunr.da.min.js.meta +0 -7
  1198. package/site/assets/javascripts/lunr/min/lunr.de.min.js +0 -18
  1199. package/site/assets/javascripts/lunr/min/lunr.de.min.js.meta +0 -7
  1200. package/site/assets/javascripts/lunr/min/lunr.du.min.js +0 -18
  1201. package/site/assets/javascripts/lunr/min/lunr.du.min.js.meta +0 -7
  1202. package/site/assets/javascripts/lunr/min/lunr.el.min.js +0 -1
  1203. package/site/assets/javascripts/lunr/min/lunr.el.min.js.meta +0 -7
  1204. package/site/assets/javascripts/lunr/min/lunr.es.min.js +0 -18
  1205. package/site/assets/javascripts/lunr/min/lunr.es.min.js.meta +0 -7
  1206. package/site/assets/javascripts/lunr/min/lunr.fi.min.js +0 -18
  1207. package/site/assets/javascripts/lunr/min/lunr.fi.min.js.meta +0 -7
  1208. package/site/assets/javascripts/lunr/min/lunr.fr.min.js +0 -18
  1209. package/site/assets/javascripts/lunr/min/lunr.fr.min.js.meta +0 -7
  1210. package/site/assets/javascripts/lunr/min/lunr.he.min.js +0 -1
  1211. package/site/assets/javascripts/lunr/min/lunr.he.min.js.meta +0 -7
  1212. package/site/assets/javascripts/lunr/min/lunr.hi.min.js +0 -1
  1213. package/site/assets/javascripts/lunr/min/lunr.hi.min.js.meta +0 -7
  1214. package/site/assets/javascripts/lunr/min/lunr.hu.min.js +0 -18
  1215. package/site/assets/javascripts/lunr/min/lunr.hu.min.js.meta +0 -7
  1216. package/site/assets/javascripts/lunr/min/lunr.hy.min.js +0 -1
  1217. package/site/assets/javascripts/lunr/min/lunr.hy.min.js.meta +0 -7
  1218. package/site/assets/javascripts/lunr/min/lunr.it.min.js +0 -18
  1219. package/site/assets/javascripts/lunr/min/lunr.it.min.js.meta +0 -7
  1220. package/site/assets/javascripts/lunr/min/lunr.ja.min.js +0 -1
  1221. package/site/assets/javascripts/lunr/min/lunr.ja.min.js.meta +0 -7
  1222. package/site/assets/javascripts/lunr/min/lunr.jp.min.js +0 -1
  1223. package/site/assets/javascripts/lunr/min/lunr.jp.min.js.meta +0 -7
  1224. package/site/assets/javascripts/lunr/min/lunr.kn.min.js +0 -1
  1225. package/site/assets/javascripts/lunr/min/lunr.kn.min.js.meta +0 -7
  1226. package/site/assets/javascripts/lunr/min/lunr.ko.min.js +0 -1
  1227. package/site/assets/javascripts/lunr/min/lunr.ko.min.js.meta +0 -7
  1228. package/site/assets/javascripts/lunr/min/lunr.multi.min.js +0 -1
  1229. package/site/assets/javascripts/lunr/min/lunr.multi.min.js.meta +0 -7
  1230. package/site/assets/javascripts/lunr/min/lunr.nl.min.js +0 -18
  1231. package/site/assets/javascripts/lunr/min/lunr.nl.min.js.meta +0 -7
  1232. package/site/assets/javascripts/lunr/min/lunr.no.min.js +0 -18
  1233. package/site/assets/javascripts/lunr/min/lunr.no.min.js.meta +0 -7
  1234. package/site/assets/javascripts/lunr/min/lunr.pt.min.js +0 -18
  1235. package/site/assets/javascripts/lunr/min/lunr.pt.min.js.meta +0 -7
  1236. package/site/assets/javascripts/lunr/min/lunr.ro.min.js +0 -18
  1237. package/site/assets/javascripts/lunr/min/lunr.ro.min.js.meta +0 -7
  1238. package/site/assets/javascripts/lunr/min/lunr.ru.min.js +0 -18
  1239. package/site/assets/javascripts/lunr/min/lunr.ru.min.js.meta +0 -7
  1240. package/site/assets/javascripts/lunr/min/lunr.sa.min.js +0 -1
  1241. package/site/assets/javascripts/lunr/min/lunr.sa.min.js.meta +0 -7
  1242. package/site/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +0 -1
  1243. package/site/assets/javascripts/lunr/min/lunr.stemmer.support.min.js.meta +0 -7
  1244. package/site/assets/javascripts/lunr/min/lunr.sv.min.js +0 -18
  1245. package/site/assets/javascripts/lunr/min/lunr.sv.min.js.meta +0 -7
  1246. package/site/assets/javascripts/lunr/min/lunr.ta.min.js +0 -1
  1247. package/site/assets/javascripts/lunr/min/lunr.ta.min.js.meta +0 -7
  1248. package/site/assets/javascripts/lunr/min/lunr.te.min.js +0 -1
  1249. package/site/assets/javascripts/lunr/min/lunr.te.min.js.meta +0 -7
  1250. package/site/assets/javascripts/lunr/min/lunr.th.min.js +0 -1
  1251. package/site/assets/javascripts/lunr/min/lunr.th.min.js.meta +0 -7
  1252. package/site/assets/javascripts/lunr/min/lunr.tr.min.js +0 -18
  1253. package/site/assets/javascripts/lunr/min/lunr.tr.min.js.meta +0 -7
  1254. package/site/assets/javascripts/lunr/min/lunr.vi.min.js +0 -1
  1255. package/site/assets/javascripts/lunr/min/lunr.vi.min.js.meta +0 -7
  1256. package/site/assets/javascripts/lunr/min/lunr.zh.min.js +0 -1
  1257. package/site/assets/javascripts/lunr/min/lunr.zh.min.js.meta +0 -7
  1258. package/site/assets/javascripts/lunr/min.meta +0 -8
  1259. package/site/assets/javascripts/lunr/tinyseg.js +0 -206
  1260. package/site/assets/javascripts/lunr/tinyseg.js.meta +0 -7
  1261. package/site/assets/javascripts/lunr/wordcut.js +0 -6708
  1262. package/site/assets/javascripts/lunr/wordcut.js.meta +0 -7
  1263. package/site/assets/javascripts/lunr.meta +0 -8
  1264. package/site/assets/javascripts/workers/search.2c215733.min.js +0 -42
  1265. package/site/assets/javascripts/workers/search.2c215733.min.js.map +0 -7
  1266. package/site/assets/javascripts/workers/search.2c215733.min.js.map.meta +0 -7
  1267. package/site/assets/javascripts/workers/search.2c215733.min.js.meta +0 -7
  1268. package/site/assets/javascripts/workers.meta +0 -8
  1269. package/site/assets/javascripts.meta +0 -8
  1270. package/site/assets/stylesheets/main.484c7ddc.min.css +0 -1
  1271. package/site/assets/stylesheets/main.484c7ddc.min.css.map +0 -1
  1272. package/site/assets/stylesheets/main.484c7ddc.min.css.map.meta +0 -7
  1273. package/site/assets/stylesheets/main.484c7ddc.min.css.meta +0 -7
  1274. package/site/assets/stylesheets/palette.ab4e12ef.min.css +0 -1
  1275. package/site/assets/stylesheets/palette.ab4e12ef.min.css.map +0 -1
  1276. package/site/assets/stylesheets/palette.ab4e12ef.min.css.map.meta +0 -7
  1277. package/site/assets/stylesheets/palette.ab4e12ef.min.css.meta +0 -7
  1278. package/site/assets/stylesheets.meta +0 -8
  1279. package/site/assets.meta +0 -8
  1280. package/site/concepts/index.html +0 -1
  1281. package/site/concepts/index.html.meta +0 -7
  1282. package/site/concepts/interceptors-and-ordering/index.html +0 -352
  1283. package/site/concepts/interceptors-and-ordering/index.html.meta +0 -7
  1284. package/site/concepts/interceptors-and-ordering.meta +0 -8
  1285. package/site/concepts/listening-patterns/index.html +0 -193
  1286. package/site/concepts/listening-patterns/index.html.meta +0 -7
  1287. package/site/concepts/listening-patterns.meta +0 -8
  1288. package/site/concepts/mental-model/index.html +0 -146
  1289. package/site/concepts/mental-model/index.html.meta +0 -7
  1290. package/site/concepts/mental-model.meta +0 -8
  1291. package/site/concepts/message-types/index.html +0 -111
  1292. package/site/concepts/message-types/index.html.meta +0 -7
  1293. package/site/concepts/message-types.meta +0 -8
  1294. package/site/concepts/targeting-and-context/index.html +0 -201
  1295. package/site/concepts/targeting-and-context/index.html.meta +0 -7
  1296. package/site/concepts/targeting-and-context.meta +0 -8
  1297. package/site/concepts.meta +0 -8
  1298. package/site/css/timeago.css +0 -15
  1299. package/site/css/timeago.css.meta +0 -7
  1300. package/site/css.meta +0 -8
  1301. package/site/examples/end-to-end/index.html +0 -85
  1302. package/site/examples/end-to-end/index.html.meta +0 -7
  1303. package/site/examples/end-to-end-scene-transitions/index.html +0 -84
  1304. package/site/examples/end-to-end-scene-transitions/index.html.meta +0 -7
  1305. package/site/examples/end-to-end-scene-transitions.meta +0 -8
  1306. package/site/examples/end-to-end.meta +0 -8
  1307. package/site/examples.meta +0 -8
  1308. package/site/getting-started/getting-started/index.html +0 -66
  1309. package/site/getting-started/getting-started/index.html.meta +0 -7
  1310. package/site/getting-started/getting-started.meta +0 -8
  1311. package/site/getting-started/index.html +0 -29
  1312. package/site/getting-started/index.html.meta +0 -7
  1313. package/site/getting-started/install/index.html +0 -8
  1314. package/site/getting-started/install/index.html.meta +0 -7
  1315. package/site/getting-started/install.meta +0 -8
  1316. package/site/getting-started/overview/index.html +0 -33
  1317. package/site/getting-started/overview/index.html.meta +0 -7
  1318. package/site/getting-started/overview.meta +0 -8
  1319. package/site/getting-started/quick-start/index.html +0 -81
  1320. package/site/getting-started/quick-start/index.html.meta +0 -7
  1321. package/site/getting-started/quick-start.meta +0 -8
  1322. package/site/getting-started/visual-guide/index.html +0 -256
  1323. package/site/getting-started/visual-guide/index.html.meta +0 -7
  1324. package/site/getting-started/visual-guide.meta +0 -8
  1325. package/site/getting-started.meta +0 -8
  1326. package/site/guides/advanced/index.html +0 -119
  1327. package/site/guides/advanced/index.html.meta +0 -7
  1328. package/site/guides/advanced.meta +0 -8
  1329. package/site/guides/diagnostics/index.html +0 -110
  1330. package/site/guides/diagnostics/index.html.meta +0 -7
  1331. package/site/guides/diagnostics.meta +0 -8
  1332. package/site/guides/migration-guide/index.html +0 -199
  1333. package/site/guides/migration-guide/index.html.meta +0 -7
  1334. package/site/guides/migration-guide.meta +0 -8
  1335. package/site/guides/patterns/index.html +0 -545
  1336. package/site/guides/patterns/index.html.meta +0 -7
  1337. package/site/guides/patterns.meta +0 -8
  1338. package/site/guides/testing/index.html +0 -153
  1339. package/site/guides/testing/index.html.meta +0 -7
  1340. package/site/guides/testing.meta +0 -8
  1341. package/site/guides/unity-integration/index.html +0 -67
  1342. package/site/guides/unity-integration/index.html.meta +0 -7
  1343. package/site/guides/unity-integration.meta +0 -8
  1344. package/site/guides.meta +0 -8
  1345. package/site/hooks.py +0 -168
  1346. package/site/hooks.py.meta +0 -7
  1347. package/site/images/DxMessaging-banner.svg +0 -119
  1348. package/site/images/DxMessaging-banner.svg.meta +0 -7
  1349. package/site/images.meta +0 -8
  1350. package/site/index.html +0 -17
  1351. package/site/index.html.meta +0 -7
  1352. package/site/integrations/index.html +0 -8
  1353. package/site/integrations/index.html.meta +0 -7
  1354. package/site/integrations/reflex/index.html +0 -186
  1355. package/site/integrations/reflex/index.html.meta +0 -7
  1356. package/site/integrations/reflex.meta +0 -8
  1357. package/site/integrations/vcontainer/index.html +0 -192
  1358. package/site/integrations/vcontainer/index.html.meta +0 -7
  1359. package/site/integrations/vcontainer.meta +0 -8
  1360. package/site/integrations/zenject/index.html +0 -197
  1361. package/site/integrations/zenject/index.html.meta +0 -7
  1362. package/site/integrations/zenject.meta +0 -8
  1363. package/site/integrations.meta +0 -8
  1364. package/site/javascripts/csharp-highlight.js +0 -246
  1365. package/site/javascripts/csharp-highlight.js.meta +0 -7
  1366. package/site/javascripts/mermaid-config.js +0 -350
  1367. package/site/javascripts/mermaid-config.js.meta +0 -7
  1368. package/site/javascripts.meta +0 -8
  1369. package/site/js/timeago.min.js +0 -2
  1370. package/site/js/timeago.min.js.meta +0 -7
  1371. package/site/js/timeago_mkdocs_material.js +0 -33
  1372. package/site/js/timeago_mkdocs_material.js.meta +0 -7
  1373. package/site/js.meta +0 -8
  1374. package/site/reference/compatibility/index.html +0 -1
  1375. package/site/reference/compatibility/index.html.meta +0 -7
  1376. package/site/reference/compatibility.meta +0 -8
  1377. package/site/reference/faq/index.html +0 -1
  1378. package/site/reference/faq/index.html.meta +0 -7
  1379. package/site/reference/faq.meta +0 -8
  1380. package/site/reference/glossary/index.html +0 -55
  1381. package/site/reference/glossary/index.html.meta +0 -7
  1382. package/site/reference/glossary.meta +0 -8
  1383. package/site/reference/helpers/index.html +0 -475
  1384. package/site/reference/helpers/index.html.meta +0 -7
  1385. package/site/reference/helpers.meta +0 -8
  1386. package/site/reference/quick-reference/index.html +0 -138
  1387. package/site/reference/quick-reference/index.html.meta +0 -7
  1388. package/site/reference/quick-reference.meta +0 -8
  1389. package/site/reference/reference/index.html +0 -194
  1390. package/site/reference/reference/index.html.meta +0 -7
  1391. package/site/reference/reference.meta +0 -8
  1392. package/site/reference/troubleshooting/index.html +0 -1
  1393. package/site/reference/troubleshooting/index.html.meta +0 -7
  1394. package/site/reference/troubleshooting.meta +0 -8
  1395. package/site/reference.meta +0 -8
  1396. package/site/search/search_index.json +0 -1
  1397. package/site/search/search_index.json.meta +0 -7
  1398. package/site/search.meta +0 -8
  1399. package/site/sitemap.xml +0 -163
  1400. package/site/sitemap.xml.gz +0 -0
  1401. package/site/sitemap.xml.gz.meta +0 -7
  1402. package/site/sitemap.xml.meta +0 -7
  1403. package/site/stylesheets/extra.css +0 -485
  1404. package/site/stylesheets/extra.css.meta +0 -7
  1405. package/site/stylesheets.meta +0 -8
@@ -1,356 +0,0 @@
1
- <!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content="High-performance type-safe messaging library for Unity"><meta name=author content="Wallstop Studios"><link href=https://wallstop.github.io/DxMessaging/architecture/comparisons/ rel=canonical><link href=../design-and-architecture/ rel=prev><link href=../performance/ rel=next><link rel=icon href=../../assets/images/favicon.png><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.7.1"><title>Comparisons - DxMessaging Documentation</title><link rel=stylesheet href=../../assets/stylesheets/main.484c7ddc.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.ab4e12ef.min.css><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#comparisons-dxmessaging-and-alternatives class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class="md-header md-header--shadow md-header--lifted" data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=../.. title="DxMessaging Documentation" class="md-header__button md-logo" aria-label="DxMessaging Documentation" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> DxMessaging Documentation </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Comparisons </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> <input class=md-option data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme=slate data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=Search placeholder=Search autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </label> <nav class=md-search__options aria-label=Search> <a href=javascript:void(0) class="md-search__icon md-icon" title=Share aria-label=Share data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=Clear aria-label=Clear tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap tabindex=0 data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> Initializing search </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/wallstop/DxMessaging title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> wallstop/DxMessaging </div> </a> </div> </nav> <nav class=md-tabs aria-label=Tabs data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> Home </a> </li> <li class=md-tabs__item> <a href=../../getting-started/ class=md-tabs__link> Getting Started </a> </li> <li class=md-tabs__item> <a href=../../concepts/ class=md-tabs__link> Concepts </a> </li> <li class=md-tabs__item> <a href=../../guides/patterns/ class=md-tabs__link> Guides </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../design-and-architecture/ class=md-tabs__link> Architecture </a> </li> <li class=md-tabs__item> <a href=../../advanced/emit-shorthands/ class=md-tabs__link> Advanced </a> </li> <li class=md-tabs__item> <a href=../../integrations/ class=md-tabs__link> Integrations </a> </li> <li class=md-tabs__item> <a href=../../examples/end-to-end/ class=md-tabs__link> Examples </a> </li> <li class=md-tabs__item> <a href=../../reference/reference/ class=md-tabs__link> Reference </a> </li> </ul> </div> </nav> </header> <div class=md-container data-md-component=container> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=Navigation data-md-level=0> <label class=md-nav__title for=__drawer> <a href=../.. title="DxMessaging Documentation" class="md-nav__button md-logo" aria-label="DxMessaging Documentation" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> DxMessaging Documentation </label> <div class=md-nav__source> <a href=https://github.com/wallstop/DxMessaging title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> wallstop/DxMessaging </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> Home </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../getting-started/ class="md-nav__link "> <span class=md-ellipsis> Getting Started </span> </a> <label class="md-nav__link " for=__nav_2 id=__nav_2_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> Getting Started </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../getting-started/overview/ class=md-nav__link> <span class=md-ellipsis> Overview </span> </a> </li> <li class=md-nav__item> <a href=../../getting-started/install/ class=md-nav__link> <span class=md-ellipsis> Installation </span> </a> </li> <li class=md-nav__item> <a href=../../getting-started/quick-start/ class=md-nav__link> <span class=md-ellipsis> Quick Start </span> </a> </li> <li class=md-nav__item> <a href=../../getting-started/getting-started/ class=md-nav__link> <span class=md-ellipsis> Getting Started Guide </span> </a> </li> <li class=md-nav__item> <a href=../../getting-started/visual-guide/ class=md-nav__link> <span class=md-ellipsis> Visual Guide </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_3> <div class="md-nav__link md-nav__container"> <a href=../../concepts/ class="md-nav__link "> <span class=md-ellipsis> Concepts </span> </a> <label class="md-nav__link " for=__nav_3 id=__nav_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> Concepts </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../concepts/mental-model/ class=md-nav__link> <span class=md-ellipsis> Mental Model </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/message-types/ class=md-nav__link> <span class=md-ellipsis> Message Types </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/listening-patterns/ class=md-nav__link> <span class=md-ellipsis> Listening Patterns </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/targeting-and-context/ class=md-nav__link> <span class=md-ellipsis> Targeting & Context </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/interceptors-and-ordering/ class=md-nav__link> <span class=md-ellipsis> Interceptors & Ordering </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex=0> <span class=md-ellipsis> Guides </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> Guides </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../guides/patterns/ class=md-nav__link> <span class=md-ellipsis> Patterns </span> </a> </li> <li class=md-nav__item> <a href=../../guides/unity-integration/ class=md-nav__link> <span class=md-ellipsis> Unity Integration </span> </a> </li> <li class=md-nav__item> <a href=../../guides/testing/ class=md-nav__link> <span class=md-ellipsis> Testing </span> </a> </li> <li class=md-nav__item> <a href=../../guides/diagnostics/ class=md-nav__link> <span class=md-ellipsis> Diagnostics </span> </a> </li> <li class=md-nav__item> <a href=../../guides/advanced/ class=md-nav__link> <span class=md-ellipsis> Advanced Topics </span> </a> </li> <li class=md-nav__item> <a href=../../guides/migration-guide/ class=md-nav__link> <span class=md-ellipsis> Migration Guide </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5 checked> <label class=md-nav__link for=__nav_5 id=__nav_5_label tabindex> <span class=md-ellipsis> Architecture </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=true> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> Architecture </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../design-and-architecture/ class=md-nav__link> <span class=md-ellipsis> Design & Architecture </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> Comparisons </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> Comparisons </span> </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#this-guide-shows class=md-nav__link> <span class=md-ellipsis> This guide shows </span> </a> <nav class=md-nav aria-label="This guide shows"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#table-of-contents class=md-nav__link> <span class=md-ellipsis> Table of Contents </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#performance-benchmarks class=md-nav__link> <span class=md-ellipsis> Performance Benchmarks </span> </a> <nav class=md-nav aria-label="Performance Benchmarks"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#comparisons-windows class=md-nav__link> <span class=md-ellipsis> Comparisons (Windows) </span> </a> </li> <li class=md-nav__item> <a href=#comparisons-macos class=md-nav__link> <span class=md-ellipsis> Comparisons (macOS) </span> </a> </li> <li class=md-nav__item> <a href=#comparisons-linux class=md-nav__link> <span class=md-ellipsis> Comparisons (Linux) </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unity-messaging-frameworks class=md-nav__link> <span class=md-ellipsis> Unity Messaging Frameworks </span> </a> <nav class=md-nav aria-label="Unity Messaging Frameworks"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#quick-summary-which-framework-to-choose class=md-nav__link> <span class=md-ellipsis> Quick Summary: Which Framework to Choose? </span> </a> <nav class=md-nav aria-label="Quick Summary: Which Framework to Choose?"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#tldr-decision-tree class=md-nav__link> <span class=md-ellipsis> TL;DR Decision Tree </span> </a> <nav class=md-nav aria-label="TL;DR Decision Tree"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#one-line-summary-for-each class=md-nav__link> <span class=md-ellipsis> One-Line Summary for Each </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unirx-reactive-extensions-for-unity class=md-nav__link> <span class=md-ellipsis> UniRx (Reactive Extensions for Unity) </span> </a> <nav class=md-nav aria-label="UniRx (Reactive Extensions for Unity)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#simple-messagebroker-setup-pubsub class=md-nav__link> <span class=md-ellipsis> Simple MessageBroker Setup (Pub/Sub) </span> </a> </li> <li class=md-nav__item> <a href=#advanced-stream-transformations-reactive-programming class=md-nav__link> <span class=md-ellipsis> Advanced Stream Transformations (Reactive Programming) </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-unirx-wins class=md-nav__link> <span class=md-ellipsis> When UniRx Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#messagepipe-high-performance-messaging class=md-nav__link> <span class=md-ellipsis> MessagePipe (High-Performance Messaging) </span> </a> <nav class=md-nav aria-label="MessagePipe (High-Performance Messaging)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_1 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_1 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_1 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_1 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_1 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_1 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_1 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-messagepipe-wins class=md-nav__link> <span class=md-ellipsis> When MessagePipe Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_1 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_1 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#zenject-signals-di-based-messaging class=md-nav__link> <span class=md-ellipsis> Zenject Signals (DI-Based Messaging) </span> </a> <nav class=md-nav aria-label="Zenject Signals (DI-Based Messaging)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_2 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_2 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_2 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_2 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_2 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_2 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_2 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-zenject-signals-win class=md-nav__link> <span class=md-ellipsis> When Zenject Signals Win </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_2 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_2 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#scriptable-object-architecture-soa class=md-nav__link> <span class=md-ellipsis> Scriptable Object Architecture (SOA) </span> </a> <nav class=md-nav aria-label="Scriptable Object Architecture (SOA)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#quick-comparison class=md-nav__link> <span class=md-ellipsis> Quick Comparison </span> </a> </li> <li class=md-nav__item> <a href=#when-to-use-each class=md-nav__link> <span class=md-ellipsis> When to Use Each </span> </a> <nav class=md-nav aria-label="When to Use Each"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#choose-soa-when class=md-nav__link> <span class=md-ellipsis> Choose SOA when </span> </a> <nav class=md-nav aria-label="Choose SOA when"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#choose-dxmessaging-when class=md-nav__link> <span class=md-ellipsis> Choose DxMessaging when </span> </a> <nav class=md-nav aria-label="Choose DxMessaging when"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#use-both-when class=md-nav__link> <span class=md-ellipsis> Use Both when </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#full-comparison-guide class=md-nav__link> <span class=md-ellipsis> Full Comparison Guide </span> </a> <nav class=md-nav aria-label="Full Comparison Guide"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#-soa-compatibility-guide class=md-nav__link> <span class=md-ellipsis> → SOA Compatibility Guide </span> </a> <nav class=md-nav aria-label="→ SOA Compatibility Guide"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#resources class=md-nav__link> <span class=md-ellipsis> Resources </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#traditional-approaches class=md-nav__link> <span class=md-ellipsis> Traditional Approaches </span> </a> <nav class=md-nav aria-label="Traditional Approaches"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#standard-c-eventsactions class=md-nav__link> <span class=md-ellipsis> Standard C# Events/Actions </span> </a> <nav class=md-nav aria-label="Standard C# Events/Actions"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_3 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_3 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_3 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_3 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_3 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_3 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_3 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-c-events-win class=md-nav__link> <span class=md-ellipsis> When C# Events Win </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_3 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_3 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unityevents-inspector-wiring class=md-nav__link> <span class=md-ellipsis> UnityEvents (Inspector Wiring) </span> </a> <nav class=md-nav aria-label="UnityEvents (Inspector Wiring)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_4 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_4 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_4 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_4 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_4 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_4 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_4 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-unityevents-win class=md-nav__link> <span class=md-ellipsis> When UnityEvents Win </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_4 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_4 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unity-sendmessage class=md-nav__link> <span class=md-ellipsis> Unity SendMessage </span> </a> <nav class=md-nav aria-label="Unity SendMessage"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_5 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_5 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_5 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_5 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_5 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_5 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_5 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-unity-sendmessage-wins class=md-nav__link> <span class=md-ellipsis> When Unity SendMessage Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_5 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_5 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#global-event-bus-singletons class=md-nav__link> <span class=md-ellipsis> Global Event Bus Singletons </span> </a> <nav class=md-nav aria-label="Global Event Bus Singletons"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_6 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_6 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_6 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_6 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_6 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_6 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_6 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-static-event-bus-wins class=md-nav__link> <span class=md-ellipsis> When Static Event Bus Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_6 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_6 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#honest-trade-offs-what-you-give-up-what-you-gain class=md-nav__link> <span class=md-ellipsis> Honest Trade-offs: What You Give Up, What You Gain </span> </a> <nav class=md-nav aria-label="Honest Trade-offs: What You Give Up, What You Gain"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#learning-curve_7 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> <nav class=md-nav aria-label="Learning Curve"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> <nav class=md-nav aria-label="What You Gain"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#verdict class=md-nav__link> <span class=md-ellipsis> Verdict </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#boilerplate class=md-nav__link> <span class=md-ellipsis> Boilerplate </span> </a> <nav class=md-nav aria-label=Boilerplate> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_1 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_1 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#example-comparison class=md-nav__link> <span class=md-ellipsis> Example Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#performance class=md-nav__link> <span class=md-ellipsis> Performance </span> </a> <nav class=md-nav aria-label=Performance> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_2 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_2 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#hard-numbers class=md-nav__link> <span class=md-ellipsis> Hard Numbers </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#flexibility class=md-nav__link> <span class=md-ellipsis> Flexibility </span> </a> <nav class=md-nav aria-label=Flexibility> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_3 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_3 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#when-limitations-hurt class=md-nav__link> <span class=md-ellipsis> When Limitations Hurt </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#debuggability class=md-nav__link> <span class=md-ellipsis> Debuggability </span> </a> <nav class=md-nav aria-label=Debuggability> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_4 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_4 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#example-finding-who-fired-a-message class=md-nav__link> <span class=md-ellipsis> Example: Finding Who Fired a Message </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#coupling-and-architecture class=md-nav__link> <span class=md-ellipsis> Coupling and Architecture </span> </a> <nav class=md-nav aria-label="Coupling and Architecture"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_5 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_5 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#impact-on-architecture class=md-nav__link> <span class=md-ellipsis> Impact on Architecture </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#testing class=md-nav__link> <span class=md-ellipsis> Testing </span> </a> <nav class=md-nav aria-label=Testing> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_6 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_6 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> <nav class=md-nav aria-label="What You Gain"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#example class=md-nav__link> <span class=md-ellipsis> Example </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#feature-by-feature-comparison-matrix class=md-nav__link> <span class=md-ellipsis> Feature-by-Feature Comparison Matrix </span> </a> <nav class=md-nav aria-label="Feature-by-Feature Comparison Matrix"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#unity-messaging-frameworks-comparison class=md-nav__link> <span class=md-ellipsis> Unity Messaging Frameworks Comparison </span> </a> </li> <li class=md-nav__item> <a href=#traditional-approaches-comparison class=md-nav__link> <span class=md-ellipsis> Traditional Approaches Comparison </span> </a> </li> <li class=md-nav__item> <a href=#overall-verdict-by-use-case class=md-nav__link> <span class=md-ellipsis> Overall Verdict by Use Case </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#when-each-approach-actually-wins class=md-nav__link> <span class=md-ellipsis> When Each Approach ACTUALLY Wins </span> </a> <nav class=md-nav aria-label="When Each Approach ACTUALLY Wins"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#dxmessaging-wins-when class=md-nav__link> <span class=md-ellipsis> DxMessaging Wins When </span> </a> </li> <li class=md-nav__item> <a href=#unirx-wins-when class=md-nav__link> <span class=md-ellipsis> UniRx Wins When </span> </a> </li> <li class=md-nav__item> <a href=#messagepipe-wins-when class=md-nav__link> <span class=md-ellipsis> MessagePipe Wins When </span> </a> </li> <li class=md-nav__item> <a href=#zenject-signals-win-when class=md-nav__link> <span class=md-ellipsis> Zenject Signals Win When </span> </a> </li> <li class=md-nav__item> <a href=#c-events-win-when class=md-nav__link> <span class=md-ellipsis> C# Events Win When </span> </a> </li> <li class=md-nav__item> <a href=#unityevents-win-when class=md-nav__link> <span class=md-ellipsis> UnityEvents Win When </span> </a> </li> <li class=md-nav__item> <a href=#soa-gameeventvariables-wins-when class=md-nav__link> <span class=md-ellipsis> SOA (GameEvent/Variables) Wins When </span> </a> </li> <li class=md-nav__item> <a href=#static-event-bus-wins-when class=md-nav__link> <span class=md-ellipsis> Static Event Bus Wins When </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#cost-benefit-summary class=md-nav__link> <span class=md-ellipsis> Cost-Benefit Summary </span> </a> <nav class=md-nav aria-label="Cost-Benefit Summary"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#costs class=md-nav__link> <span class=md-ellipsis> Costs </span> </a> </li> <li class=md-nav__item> <a href=#benefits class=md-nav__link> <span class=md-ellipsis> Benefits </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#making-the-decision-be-honest-with-yourself class=md-nav__link> <span class=md-ellipsis> Making the Decision (Be Honest With Yourself) </span> </a> <nav class=md-nav aria-label="Making the Decision (Be Honest With Yourself)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#answer-these-questions-honestly class=md-nav__link> <span class=md-ellipsis> Answer these questions honestly </span> </a> </li> <li class=md-nav__item> <a href=#1-project-lifespan class=md-nav__link> <span class=md-ellipsis> 1. Project Lifespan? </span> </a> </li> <li class=md-nav__item> <a href=#2-team-size class=md-nav__link> <span class=md-ellipsis> 2. Team Size? </span> </a> </li> <li class=md-nav__item> <a href=#3-codebase-size class=md-nav__link> <span class=md-ellipsis> 3. Codebase Size? </span> </a> </li> <li class=md-nav__item> <a href=#4-how-many-systems-need-to-communicate class=md-nav__link> <span class=md-ellipsis> 4. How Many Systems Need to Communicate? </span> </a> </li> <li class=md-nav__item> <a href=#5-have-you-had-memory-leaks-from-forgotten-unsubscribes class=md-nav__link> <span class=md-ellipsis> 5. Have You Had Memory Leaks From Forgotten Unsubscribes? </span> </a> </li> <li class=md-nav__item> <a href=#6-how-often-do-you-debug-what-fired-when class=md-nav__link> <span class=md-ellipsis> 6. How Often Do You Debug "What Fired When?" </span> </a> </li> <li class=md-nav__item> <a href=#quick-decision-matrix class=md-nav__link> <span class=md-ellipsis> Quick Decision Matrix </span> </a> </li> <li class=md-nav__item> <a href=#the-real-question class=md-nav__link> <span class=md-ellipsis> The Real Question </span> </a> <nav class=md-nav aria-label="The Real Question"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#will-this-project-still-exist-in-3-months class=md-nav__link> <span class=md-ellipsis> "Will this project still exist in 3 months?" </span> </a> <nav class=md-nav aria-label='"Will this project still exist in 3 months?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#will-anyone-else-work-on-this-code class=md-nav__link> <span class=md-ellipsis> "Will anyone else work on this code?" </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#rule-of-thumb class=md-nav__link> <span class=md-ellipsis> Rule of Thumb </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=../performance/ class=md-nav__link> <span class=md-ellipsis> Performance </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_6> <label class=md-nav__link for=__nav_6 id=__nav_6_label tabindex=0> <span class=md-ellipsis> Advanced </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> Advanced </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../advanced/emit-shorthands/ class=md-nav__link> <span class=md-ellipsis> Emit Shorthands </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/message-bus-providers/ class=md-nav__link> <span class=md-ellipsis> Message Bus Providers </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/registration-builders/ class=md-nav__link> <span class=md-ellipsis> Registration Builders </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/runtime-configuration/ class=md-nav__link> <span class=md-ellipsis> Runtime Configuration </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/string-messages/ class=md-nav__link> <span class=md-ellipsis> String Messages </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_7> <div class="md-nav__link md-nav__container"> <a href=../../integrations/ class="md-nav__link "> <span class=md-ellipsis> Integrations </span> </a> <label class="md-nav__link " for=__nav_7 id=__nav_7_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> Integrations </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../integrations/vcontainer/ class=md-nav__link> <span class=md-ellipsis> VContainer </span> </a> </li> <li class=md-nav__item> <a href=../../integrations/zenject/ class=md-nav__link> <span class=md-ellipsis> Zenject </span> </a> </li> <li class=md-nav__item> <a href=../../integrations/reflex/ class=md-nav__link> <span class=md-ellipsis> Reflex </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_8> <label class=md-nav__link for=__nav_8 id=__nav_8_label tabindex=0> <span class=md-ellipsis> Examples </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> Examples </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../examples/end-to-end/ class=md-nav__link> <span class=md-ellipsis> End-to-End </span> </a> </li> <li class=md-nav__item> <a href=../../examples/end-to-end-scene-transitions/ class=md-nav__link> <span class=md-ellipsis> Scene Transitions </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex=0> <span class=md-ellipsis> Reference </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> Reference </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../reference/reference/ class=md-nav__link> <span class=md-ellipsis> API Reference (Practical) </span> </a> </li> <li class=md-nav__item> <a href=../../reference/quick-reference/ class=md-nav__link> <span class=md-ellipsis> Quick Reference </span> </a> </li> <li class=md-nav__item> <a href=../../reference/helpers/ class=md-nav__link> <span class=md-ellipsis> Helpers </span> </a> </li> <li class=md-nav__item> <a href=../../reference/faq/ class=md-nav__link> <span class=md-ellipsis> FAQ </span> </a> </li> <li class=md-nav__item> <a href=../../reference/glossary/ class=md-nav__link> <span class=md-ellipsis> Glossary </span> </a> </li> <li class=md-nav__item> <a href=../../reference/troubleshooting/ class=md-nav__link> <span class=md-ellipsis> Troubleshooting </span> </a> </li> <li class=md-nav__item> <a href=../../reference/compatibility/ class=md-nav__link> <span class=md-ellipsis> Compatibility </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#this-guide-shows class=md-nav__link> <span class=md-ellipsis> This guide shows </span> </a> <nav class=md-nav aria-label="This guide shows"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#table-of-contents class=md-nav__link> <span class=md-ellipsis> Table of Contents </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#performance-benchmarks class=md-nav__link> <span class=md-ellipsis> Performance Benchmarks </span> </a> <nav class=md-nav aria-label="Performance Benchmarks"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#comparisons-windows class=md-nav__link> <span class=md-ellipsis> Comparisons (Windows) </span> </a> </li> <li class=md-nav__item> <a href=#comparisons-macos class=md-nav__link> <span class=md-ellipsis> Comparisons (macOS) </span> </a> </li> <li class=md-nav__item> <a href=#comparisons-linux class=md-nav__link> <span class=md-ellipsis> Comparisons (Linux) </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unity-messaging-frameworks class=md-nav__link> <span class=md-ellipsis> Unity Messaging Frameworks </span> </a> <nav class=md-nav aria-label="Unity Messaging Frameworks"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#quick-summary-which-framework-to-choose class=md-nav__link> <span class=md-ellipsis> Quick Summary: Which Framework to Choose? </span> </a> <nav class=md-nav aria-label="Quick Summary: Which Framework to Choose?"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#tldr-decision-tree class=md-nav__link> <span class=md-ellipsis> TL;DR Decision Tree </span> </a> <nav class=md-nav aria-label="TL;DR Decision Tree"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#one-line-summary-for-each class=md-nav__link> <span class=md-ellipsis> One-Line Summary for Each </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unirx-reactive-extensions-for-unity class=md-nav__link> <span class=md-ellipsis> UniRx (Reactive Extensions for Unity) </span> </a> <nav class=md-nav aria-label="UniRx (Reactive Extensions for Unity)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#simple-messagebroker-setup-pubsub class=md-nav__link> <span class=md-ellipsis> Simple MessageBroker Setup (Pub/Sub) </span> </a> </li> <li class=md-nav__item> <a href=#advanced-stream-transformations-reactive-programming class=md-nav__link> <span class=md-ellipsis> Advanced Stream Transformations (Reactive Programming) </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-unirx-wins class=md-nav__link> <span class=md-ellipsis> When UniRx Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#messagepipe-high-performance-messaging class=md-nav__link> <span class=md-ellipsis> MessagePipe (High-Performance Messaging) </span> </a> <nav class=md-nav aria-label="MessagePipe (High-Performance Messaging)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_1 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_1 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_1 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_1 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_1 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_1 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_1 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-messagepipe-wins class=md-nav__link> <span class=md-ellipsis> When MessagePipe Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_1 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_1 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#zenject-signals-di-based-messaging class=md-nav__link> <span class=md-ellipsis> Zenject Signals (DI-Based Messaging) </span> </a> <nav class=md-nav aria-label="Zenject Signals (DI-Based Messaging)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_2 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_2 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_2 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_2 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_2 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_2 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_2 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-zenject-signals-win class=md-nav__link> <span class=md-ellipsis> When Zenject Signals Win </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_2 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_2 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#scriptable-object-architecture-soa class=md-nav__link> <span class=md-ellipsis> Scriptable Object Architecture (SOA) </span> </a> <nav class=md-nav aria-label="Scriptable Object Architecture (SOA)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#quick-comparison class=md-nav__link> <span class=md-ellipsis> Quick Comparison </span> </a> </li> <li class=md-nav__item> <a href=#when-to-use-each class=md-nav__link> <span class=md-ellipsis> When to Use Each </span> </a> <nav class=md-nav aria-label="When to Use Each"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#choose-soa-when class=md-nav__link> <span class=md-ellipsis> Choose SOA when </span> </a> <nav class=md-nav aria-label="Choose SOA when"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#choose-dxmessaging-when class=md-nav__link> <span class=md-ellipsis> Choose DxMessaging when </span> </a> <nav class=md-nav aria-label="Choose DxMessaging when"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#use-both-when class=md-nav__link> <span class=md-ellipsis> Use Both when </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#full-comparison-guide class=md-nav__link> <span class=md-ellipsis> Full Comparison Guide </span> </a> <nav class=md-nav aria-label="Full Comparison Guide"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#-soa-compatibility-guide class=md-nav__link> <span class=md-ellipsis> → SOA Compatibility Guide </span> </a> <nav class=md-nav aria-label="→ SOA Compatibility Guide"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#resources class=md-nav__link> <span class=md-ellipsis> Resources </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#traditional-approaches class=md-nav__link> <span class=md-ellipsis> Traditional Approaches </span> </a> <nav class=md-nav aria-label="Traditional Approaches"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#standard-c-eventsactions class=md-nav__link> <span class=md-ellipsis> Standard C# Events/Actions </span> </a> <nav class=md-nav aria-label="Standard C# Events/Actions"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_3 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_3 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_3 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_3 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_3 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_3 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_3 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-c-events-win class=md-nav__link> <span class=md-ellipsis> When C# Events Win </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_3 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_3 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unityevents-inspector-wiring class=md-nav__link> <span class=md-ellipsis> UnityEvents (Inspector Wiring) </span> </a> <nav class=md-nav aria-label="UnityEvents (Inspector Wiring)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_4 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_4 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_4 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_4 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_4 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_4 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_4 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-unityevents-win class=md-nav__link> <span class=md-ellipsis> When UnityEvents Win </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_4 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_4 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#unity-sendmessage class=md-nav__link> <span class=md-ellipsis> Unity SendMessage </span> </a> <nav class=md-nav aria-label="Unity SendMessage"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_5 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_5 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_5 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_5 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_5 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_5 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_5 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-unity-sendmessage-wins class=md-nav__link> <span class=md-ellipsis> When Unity SendMessage Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_5 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_5 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#global-event-bus-singletons class=md-nav__link> <span class=md-ellipsis> Global Event Bus Singletons </span> </a> <nav class=md-nav aria-label="Global Event Bus Singletons"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-features_6 class=md-nav__link> <span class=md-ellipsis> Key Features </span> </a> </li> <li class=md-nav__item> <a href=#code-example_6 class=md-nav__link> <span class=md-ellipsis> Code Example </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-solves_6 class=md-nav__link> <span class=md-ellipsis> What Problems It Solves </span> </a> </li> <li class=md-nav__item> <a href=#what-problems-it-doesnt-solve-well_6 class=md-nav__link> <span class=md-ellipsis> What Problems It Doesn't Solve Well </span> </a> </li> <li class=md-nav__item> <a href=#performance-characteristics_6 class=md-nav__link> <span class=md-ellipsis> Performance Characteristics </span> </a> </li> <li class=md-nav__item> <a href=#learning-curve_6 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> </li> <li class=md-nav__item> <a href=#ease-of-understanding_6 class=md-nav__link> <span class=md-ellipsis> Ease of Understanding </span> </a> </li> <li class=md-nav__item> <a href=#when-static-event-bus-wins class=md-nav__link> <span class=md-ellipsis> When Static Event Bus Wins </span> </a> </li> <li class=md-nav__item> <a href=#when-dxmessaging-wins_6 class=md-nav__link> <span class=md-ellipsis> When DxMessaging Wins </span> </a> </li> <li class=md-nav__item> <a href=#direct-comparison_6 class=md-nav__link> <span class=md-ellipsis> Direct Comparison </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#honest-trade-offs-what-you-give-up-what-you-gain class=md-nav__link> <span class=md-ellipsis> Honest Trade-offs: What You Give Up, What You Gain </span> </a> <nav class=md-nav aria-label="Honest Trade-offs: What You Give Up, What You Gain"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#learning-curve_7 class=md-nav__link> <span class=md-ellipsis> Learning Curve </span> </a> <nav class=md-nav aria-label="Learning Curve"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> <nav class=md-nav aria-label="What You Gain"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#verdict class=md-nav__link> <span class=md-ellipsis> Verdict </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#boilerplate class=md-nav__link> <span class=md-ellipsis> Boilerplate </span> </a> <nav class=md-nav aria-label=Boilerplate> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_1 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_1 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#example-comparison class=md-nav__link> <span class=md-ellipsis> Example Comparison </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#performance class=md-nav__link> <span class=md-ellipsis> Performance </span> </a> <nav class=md-nav aria-label=Performance> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_2 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_2 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#hard-numbers class=md-nav__link> <span class=md-ellipsis> Hard Numbers </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#flexibility class=md-nav__link> <span class=md-ellipsis> Flexibility </span> </a> <nav class=md-nav aria-label=Flexibility> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_3 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_3 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#when-limitations-hurt class=md-nav__link> <span class=md-ellipsis> When Limitations Hurt </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#debuggability class=md-nav__link> <span class=md-ellipsis> Debuggability </span> </a> <nav class=md-nav aria-label=Debuggability> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_4 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_4 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#example-finding-who-fired-a-message class=md-nav__link> <span class=md-ellipsis> Example: Finding Who Fired a Message </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#coupling-and-architecture class=md-nav__link> <span class=md-ellipsis> Coupling and Architecture </span> </a> <nav class=md-nav aria-label="Coupling and Architecture"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_5 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_5 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> </li> <li class=md-nav__item> <a href=#impact-on-architecture class=md-nav__link> <span class=md-ellipsis> Impact on Architecture </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#testing class=md-nav__link> <span class=md-ellipsis> Testing </span> </a> <nav class=md-nav aria-label=Testing> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-you-give-up_6 class=md-nav__link> <span class=md-ellipsis> What You Give Up </span> </a> </li> <li class=md-nav__item> <a href=#what-you-gain_6 class=md-nav__link> <span class=md-ellipsis> What You Gain </span> </a> <nav class=md-nav aria-label="What You Gain"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#example class=md-nav__link> <span class=md-ellipsis> Example </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#feature-by-feature-comparison-matrix class=md-nav__link> <span class=md-ellipsis> Feature-by-Feature Comparison Matrix </span> </a> <nav class=md-nav aria-label="Feature-by-Feature Comparison Matrix"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#unity-messaging-frameworks-comparison class=md-nav__link> <span class=md-ellipsis> Unity Messaging Frameworks Comparison </span> </a> </li> <li class=md-nav__item> <a href=#traditional-approaches-comparison class=md-nav__link> <span class=md-ellipsis> Traditional Approaches Comparison </span> </a> </li> <li class=md-nav__item> <a href=#overall-verdict-by-use-case class=md-nav__link> <span class=md-ellipsis> Overall Verdict by Use Case </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#when-each-approach-actually-wins class=md-nav__link> <span class=md-ellipsis> When Each Approach ACTUALLY Wins </span> </a> <nav class=md-nav aria-label="When Each Approach ACTUALLY Wins"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#dxmessaging-wins-when class=md-nav__link> <span class=md-ellipsis> DxMessaging Wins When </span> </a> </li> <li class=md-nav__item> <a href=#unirx-wins-when class=md-nav__link> <span class=md-ellipsis> UniRx Wins When </span> </a> </li> <li class=md-nav__item> <a href=#messagepipe-wins-when class=md-nav__link> <span class=md-ellipsis> MessagePipe Wins When </span> </a> </li> <li class=md-nav__item> <a href=#zenject-signals-win-when class=md-nav__link> <span class=md-ellipsis> Zenject Signals Win When </span> </a> </li> <li class=md-nav__item> <a href=#c-events-win-when class=md-nav__link> <span class=md-ellipsis> C# Events Win When </span> </a> </li> <li class=md-nav__item> <a href=#unityevents-win-when class=md-nav__link> <span class=md-ellipsis> UnityEvents Win When </span> </a> </li> <li class=md-nav__item> <a href=#soa-gameeventvariables-wins-when class=md-nav__link> <span class=md-ellipsis> SOA (GameEvent/Variables) Wins When </span> </a> </li> <li class=md-nav__item> <a href=#static-event-bus-wins-when class=md-nav__link> <span class=md-ellipsis> Static Event Bus Wins When </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#cost-benefit-summary class=md-nav__link> <span class=md-ellipsis> Cost-Benefit Summary </span> </a> <nav class=md-nav aria-label="Cost-Benefit Summary"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#costs class=md-nav__link> <span class=md-ellipsis> Costs </span> </a> </li> <li class=md-nav__item> <a href=#benefits class=md-nav__link> <span class=md-ellipsis> Benefits </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#making-the-decision-be-honest-with-yourself class=md-nav__link> <span class=md-ellipsis> Making the Decision (Be Honest With Yourself) </span> </a> <nav class=md-nav aria-label="Making the Decision (Be Honest With Yourself)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#answer-these-questions-honestly class=md-nav__link> <span class=md-ellipsis> Answer these questions honestly </span> </a> </li> <li class=md-nav__item> <a href=#1-project-lifespan class=md-nav__link> <span class=md-ellipsis> 1. Project Lifespan? </span> </a> </li> <li class=md-nav__item> <a href=#2-team-size class=md-nav__link> <span class=md-ellipsis> 2. Team Size? </span> </a> </li> <li class=md-nav__item> <a href=#3-codebase-size class=md-nav__link> <span class=md-ellipsis> 3. Codebase Size? </span> </a> </li> <li class=md-nav__item> <a href=#4-how-many-systems-need-to-communicate class=md-nav__link> <span class=md-ellipsis> 4. How Many Systems Need to Communicate? </span> </a> </li> <li class=md-nav__item> <a href=#5-have-you-had-memory-leaks-from-forgotten-unsubscribes class=md-nav__link> <span class=md-ellipsis> 5. Have You Had Memory Leaks From Forgotten Unsubscribes? </span> </a> </li> <li class=md-nav__item> <a href=#6-how-often-do-you-debug-what-fired-when class=md-nav__link> <span class=md-ellipsis> 6. How Often Do You Debug "What Fired When?" </span> </a> </li> <li class=md-nav__item> <a href=#quick-decision-matrix class=md-nav__link> <span class=md-ellipsis> Quick Decision Matrix </span> </a> </li> <li class=md-nav__item> <a href=#the-real-question class=md-nav__link> <span class=md-ellipsis> The Real Question </span> </a> <nav class=md-nav aria-label="The Real Question"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#will-this-project-still-exist-in-3-months class=md-nav__link> <span class=md-ellipsis> "Will this project still exist in 3 months?" </span> </a> <nav class=md-nav aria-label='"Will this project still exist in 3 months?"'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#will-anyone-else-work-on-this-code class=md-nav__link> <span class=md-ellipsis> "Will anyone else work on this code?" </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#rule-of-thumb class=md-nav__link> <span class=md-ellipsis> Rule of Thumb </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <nav class=md-path aria-label=Navigation> <ol class=md-path__list> <li class=md-path__item> <a href=../.. class=md-path__link> <span class=md-ellipsis> Home </span> </a> </li> <li class=md-path__item> <a href=../design-and-architecture/ class=md-path__link> <span class=md-ellipsis> Architecture </span> </a> </li> </ol> </nav> <article class="md-content__inner md-typeset"> <a href=https://github.com/wallstop/DxMessaging/edit/master/docs/architecture/comparisons.md title="Edit this page" class="md-content__button md-icon" rel=edit> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg> </a> <a href=https://github.com/wallstop/DxMessaging/raw/master/docs/architecture/comparisons.md title="View source of this page" class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.2 8.2 0 0 1-1.23-2"/></svg> </a> <h1 id=comparisons-dxmessaging-and-alternatives>Comparisons: DxMessaging and Alternatives<a class=headerlink href=#comparisons-dxmessaging-and-alternatives title="Anchor link to this section">&para;</a></h1> <p><strong>TL;DR:</strong> This guide compares DxMessaging with other messaging approaches. Each has legitimate strengths and trade-offs. DxMessaging takes a different approach with its own trade-offs.</p> <h2 id=this-guide-shows>This guide shows<a class=headerlink href=#this-guide-shows title="Anchor link to this section">&para;</a></h2> <ul> <li>Characteristics of each approach (with real code examples)</li> <li>How DxMessaging takes a different approach (with real code examples)</li> <li>Trade-offs for each option (what you give up, what you gain)</li> <li>When to use each approach based on your needs</li> </ul> <h3 id=table-of-contents>Table of Contents<a class=headerlink href=#table-of-contents title="Anchor link to this section">&para;</a></h3> <ul> <li><a href=#performance-benchmarks>Performance Benchmarks</a></li> <li><a href=#unity-messaging-frameworks>Unity Messaging Frameworks</a></li> <li><a href=#unirx-reactive-extensions-for-unity>UniRx</a></li> <li><a href=#messagepipe-high-performance-messaging>MessagePipe</a></li> <li><a href=#zenject-signals-di-based-messaging>Zenject Signals</a></li> <li><a href=#scriptable-object-architecture-soa>Scriptable Object Architecture (SOA)</a></li> <li><a href=#traditional-approaches>Traditional Approaches</a></li> <li><a href=#standard-c-eventsactions>C# Events/Delegates</a></li> <li><a href=#unityevents-inspector-wiring>UnityEvents</a></li> <li><a href=#unity-sendmessage>Unity SendMessage</a></li> <li><a href=#global-event-bus-singletons>Static Event Buses</a></li> <li><a href=#honest-trade-offs-what-you-give-up-what-you-gain>Trade-offs</a></li> <li><a href=#feature-by-feature-comparison-matrix>Feature Matrix</a></li> <li><a href=#when-each-approach-actually-wins>Decision Guide</a></li> </ul> <h2 id=performance-benchmarks>Performance Benchmarks<a class=headerlink href=#performance-benchmarks title="Anchor link to this section">&para;</a></h2> <p>These sections are auto-updated by the PlayMode comparison benchmarks in the <a href=https://github.com/wallstop/DxMessaging/blob/master/Tests/Runtime/Benchmarks/ComparisonPerformanceTests.cs>Comparison Performance PlayMode tests</a>. Run the suite locally to refresh the tables.</p> <h3 id=comparisons-windows>Comparisons (Windows)<a class=headerlink href=#comparisons-windows title="Anchor link to this section">&para;</a></h3> <table> <thead> <tr> <th>Message Tech</th> <th>Operations / Second</th> <th>Allocations?</th> </tr> </thead> <tbody> <tr> <td>DxMessaging (Untargeted) - No-Copy</td> <td>19,886,000</td> <td>No</td> </tr> <tr> <td>UniRx MessageBroker</td> <td>18,002,000</td> <td>No</td> </tr> <tr> <td>MessagePipe (Global)</td> <td>97,748,000</td> <td>No</td> </tr> <tr> <td>Zenject SignalBus</td> <td>2,350,000</td> <td>Yes</td> </tr> </tbody> </table> <h3 id=comparisons-macos>Comparisons (macOS)<a class=headerlink href=#comparisons-macos title="Anchor link to this section">&para;</a></h3> <p>Run the PlayMode comparison benchmarks on macOS to populate this section.</p> <h3 id=comparisons-linux>Comparisons (Linux)<a class=headerlink href=#comparisons-linux title="Anchor link to this section">&para;</a></h3> <p>Run the PlayMode comparison benchmarks on Linux to populate this section.</p> <hr> <h2 id=unity-messaging-frameworks>Unity Messaging Frameworks<a class=headerlink href=#unity-messaging-frameworks title="Anchor link to this section">&para;</a></h2> <p>This section compares DxMessaging with other popular Unity messaging/eventing libraries. Each offers different approaches to solving communication and decoupling problems in Unity.</p> <h3 id=quick-summary-which-framework-to-choose>Quick Summary: Which Framework to Choose?<a class=headerlink href=#quick-summary-which-framework-to-choose title="Anchor link to this section">&para;</a></h3> <h4 id=tldr-decision-tree>TL;DR Decision Tree<a class=headerlink href=#tldr-decision-tree title="Anchor link to this section">&para;</a></h4> <div class="language-text highlight"><span class=filename>Text Only</span><pre><span></span><code><span id=__span-0-1><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a>Need absolute simplest pub/sub setup (zero boilerplate)?
2
- </span><span id=__span-0-2><a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> → Use UniRx MessageBroker (publish/receive in 2 lines)
3
- </span><span id=__span-0-3><a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a>
4
- </span><span id=__span-0-4><a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a>Need complex event stream transformations (debounce, throttle, combine)?
5
- </span><span id=__span-0-5><a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> → Use UniRx (reactive programming paradigm)
6
- </span><span id=__span-0-6><a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a>
7
- </span><span id=__span-0-7><a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a>Already using Dependency Injection (Zenject, VContainer, Reflex)?
8
- </span><span id=__span-0-8><a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> → Use MessagePipe (DI-first, best performance) or Zenject Signals (if on Zenject)
9
- </span><span id=__span-0-9><a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a> → Or DxMessaging (integrates with DI, see Integrations guides for Zenject/VContainer/Reflex)
10
- </span><span id=__span-0-10><a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a>
11
- </span><span id=__span-0-11><a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a>Need Unity-specific features (GameObject targeting, Inspector debugging, global observers)?
12
- </span><span id=__span-0-12><a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a> → Use DxMessaging (Unity-first design)
13
- </span><span id=__span-0-13><a id=__codelineno-0-13 name=__codelineno-0-13 href=#__codelineno-0-13></a>
14
- </span><span id=__span-0-14><a id=__codelineno-0-14 name=__codelineno-0-14 href=#__codelineno-0-14></a>Want plug-and-play with zero dependencies?
15
- </span><span id=__span-0-15><a id=__codelineno-0-15 name=__codelineno-0-15 href=#__codelineno-0-15></a> → Use DxMessaging (no setup required)
16
- </span><span id=__span-0-16><a id=__codelineno-0-16 name=__codelineno-0-16 href=#__codelineno-0-16></a>
17
- </span><span id=__span-0-17><a id=__codelineno-0-17 name=__codelineno-0-17 href=#__codelineno-0-17></a>Maximum raw throughput is a top priority?
18
- </span><span id=__span-0-18><a id=__codelineno-0-18 name=__codelineno-0-18 href=#__codelineno-0-18></a> → Use MessagePipe (highest ops/sec in benchmarks)
19
- </span><span id=__span-0-19><a id=__codelineno-0-19 name=__codelineno-0-19 href=#__codelineno-0-19></a>
20
- </span><span id=__span-0-20><a id=__codelineno-0-20 name=__codelineno-0-20 href=#__codelineno-0-20></a>Need message validation, interception, or ordered execution?
21
- </span><span id=__span-0-21><a id=__codelineno-0-21 name=__codelineno-0-21 href=#__codelineno-0-21></a> → Use DxMessaging (interceptor pipeline, priority-based ordering)
22
- </span><span id=__span-0-22><a id=__codelineno-0-22 name=__codelineno-0-22 href=#__codelineno-0-22></a>
23
- </span><span id=__span-0-23><a id=__codelineno-0-23 name=__codelineno-0-23 href=#__codelineno-0-23></a>Simple pub/sub with automatic lifecycle management and debugging?
24
- </span><span id=__span-0-24><a id=__codelineno-0-24 name=__codelineno-0-24 href=#__codelineno-0-24></a> → Use DxMessaging (automatic cleanup, priorities, validation, Inspector)
25
- </span></code></pre></div> <h5 id=one-line-summary-for-each>One-Line Summary for Each<a class=headerlink href=#one-line-summary-for-each title="Anchor link to this section">&para;</a></h5> <ul> <li><strong>DxMessaging:</strong> Unity-first pub/sub with automatic lifecycle and Inspector debugging</li> <li><strong>UniRx:</strong> Reactive programming with LINQ-style stream operators for complex event transformations</li> <li><strong>MessagePipe:</strong> DI-first, highest throughput for high-frequency messaging in DI architectures</li> <li><strong>Zenject Signals:</strong> Decoupled messaging integrated with Zenject dependency injection</li> </ul> <blockquote> <p><strong>💡 Note:</strong> DxMessaging works both standalone (zero dependencies) AND with DI frameworks. See <a href=../../integrations/ >Integration Guides</a> for Zenject, VContainer, and Reflex.</p> </blockquote> <hr> <h3 id=unirx-reactive-extensions-for-unity>UniRx (Reactive Extensions for Unity)<a class=headerlink href=#unirx-reactive-extensions-for-unity title="Anchor link to this section">&para;</a></h3> <p><strong>What It Is:</strong> A reactive programming library that treats events as observable streams. Based on .NET Reactive Extensions (Rx), reimplemented for Unity with IL2CPP compatibility.</p> <p><strong>Core Philosophy:</strong> Everything is a stream that can be observed, filtered, combined, and transformed using LINQ-style operators.</p> <h4 id=key-features>Key Features<a class=headerlink href=#key-features title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>Stream-based programming:</strong> Transform events into observable sequences</li> <li><strong>LINQ operators:</strong> <code>Where</code>, <code>Select</code>, <code>Merge</code>, <code>CombineLatest</code>, <code>Buffer</code>, etc.</li> <li><strong>Async operations:</strong> Convert coroutines to observables with cancellation support</li> <li><strong>Multithreading:</strong> Thread-safe operations with main thread synchronization</li> <li><strong>Time operators:</strong> Frame-based and time-based event handling</li> <li><strong>UI integration:</strong> Observable extensions for Unity UI events</li> </ul> <h4 id=code-example>Code Example<a class=headerlink href=#code-example title="Anchor link to this section">&para;</a></h4> <h4 id=simple-messagebroker-setup-pubsub>Simple MessageBroker Setup (Pub/Sub)<a class=headerlink href=#simple-messagebroker-setup-pubsub title="Anchor link to this section">&para;</a></h4> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-1-1><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=k>using</span><span class=w> </span><span class=nn>UniRx</span><span class=p>;</span>
26
- </span><span id=__span-1-2><a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a><span class=k>using</span><span class=w> </span><span class=nn>UnityEngine</span><span class=p>;</span>
27
- </span><span id=__span-1-3><a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a>
28
- </span><span id=__span-1-4><a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a><span class=k>public</span><span class=w> </span><span class=k>struct</span><span class=w> </span><span class=nc>EnemySpawned</span>
29
- </span><span id=__span-1-5><a id=__codelineno-1-5 name=__codelineno-1-5 href=#__codelineno-1-5></a><span class=p>{</span>
30
- </span><span id=__span-1-6><a id=__codelineno-1-6 name=__codelineno-1-6 href=#__codelineno-1-6></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>EnemyId</span><span class=p>;</span>
31
- </span><span id=__span-1-7><a id=__codelineno-1-7 name=__codelineno-1-7 href=#__codelineno-1-7></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=n>Vector3</span><span class=w> </span><span class=n>Position</span><span class=p>;</span>
32
- </span><span id=__span-1-8><a id=__codelineno-1-8 name=__codelineno-1-8 href=#__codelineno-1-8></a><span class=p>}</span>
33
- </span><span id=__span-1-9><a id=__codelineno-1-9 name=__codelineno-1-9 href=#__codelineno-1-9></a>
34
- </span><span id=__span-1-10><a id=__codelineno-1-10 name=__codelineno-1-10 href=#__codelineno-1-10></a><span class=c1>// Publisher - straightforward, no setup required</span>
35
- </span><span id=__span-1-11><a id=__codelineno-1-11 name=__codelineno-1-11 href=#__codelineno-1-11></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>EnemySpawner</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
36
- </span><span id=__span-1-12><a id=__codelineno-1-12 name=__codelineno-1-12 href=#__codelineno-1-12></a><span class=p>{</span>
37
- </span><span id=__span-1-13><a id=__codelineno-1-13 name=__codelineno-1-13 href=#__codelineno-1-13></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>SpawnEnemy</span><span class=p>(</span><span class=kt>int</span><span class=w> </span><span class=n>id</span><span class=p>)</span>
38
- </span><span id=__span-1-14><a id=__codelineno-1-14 name=__codelineno-1-14 href=#__codelineno-1-14></a><span class=w> </span><span class=p>{</span>
39
- </span><span id=__span-1-15><a id=__codelineno-1-15 name=__codelineno-1-15 href=#__codelineno-1-15></a><span class=w> </span><span class=n>MessageBroker</span><span class=p>.</span><span class=n>Default</span><span class=p>.</span><span class=n>Publish</span><span class=p>(</span><span class=k>new</span><span class=w> </span><span class=n>EnemySpawned</span>
40
- </span><span id=__span-1-16><a id=__codelineno-1-16 name=__codelineno-1-16 href=#__codelineno-1-16></a><span class=w> </span><span class=p>{</span>
41
- </span><span id=__span-1-17><a id=__codelineno-1-17 name=__codelineno-1-17 href=#__codelineno-1-17></a><span class=w> </span><span class=n>EnemyId</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>id</span><span class=p>,</span>
42
- </span><span id=__span-1-18><a id=__codelineno-1-18 name=__codelineno-1-18 href=#__codelineno-1-18></a><span class=w> </span><span class=n>Position</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>transform</span><span class=p>.</span><span class=n>position</span>
43
- </span><span id=__span-1-19><a id=__codelineno-1-19 name=__codelineno-1-19 href=#__codelineno-1-19></a><span class=w> </span><span class=p>});</span>
44
- </span><span id=__span-1-20><a id=__codelineno-1-20 name=__codelineno-1-20 href=#__codelineno-1-20></a><span class=w> </span><span class=p>}</span>
45
- </span><span id=__span-1-21><a id=__codelineno-1-21 name=__codelineno-1-21 href=#__codelineno-1-21></a><span class=p>}</span>
46
- </span><span id=__span-1-22><a id=__codelineno-1-22 name=__codelineno-1-22 href=#__codelineno-1-22></a>
47
- </span><span id=__span-1-23><a id=__codelineno-1-23 name=__codelineno-1-23 href=#__codelineno-1-23></a><span class=c1>// Subscriber - also straightforward</span>
48
- </span><span id=__span-1-24><a id=__codelineno-1-24 name=__codelineno-1-24 href=#__codelineno-1-24></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>AchievementSystem</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
49
- </span><span id=__span-1-25><a id=__codelineno-1-25 name=__codelineno-1-25 href=#__codelineno-1-25></a><span class=p>{</span>
50
- </span><span id=__span-1-26><a id=__codelineno-1-26 name=__codelineno-1-26 href=#__codelineno-1-26></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Start</span><span class=p>()</span>
51
- </span><span id=__span-1-27><a id=__codelineno-1-27 name=__codelineno-1-27 href=#__codelineno-1-27></a><span class=w> </span><span class=p>{</span>
52
- </span><span id=__span-1-28><a id=__codelineno-1-28 name=__codelineno-1-28 href=#__codelineno-1-28></a><span class=w> </span><span class=n>MessageBroker</span><span class=p>.</span><span class=n>Default</span><span class=p>.</span><span class=n>Receive</span><span class=o>&lt;</span><span class=n>EnemySpawned</span><span class=o>&gt;</span><span class=p>()</span>
53
- </span><span id=__span-1-29><a id=__codelineno-1-29 name=__codelineno-1-29 href=#__codelineno-1-29></a><span class=w> </span><span class=p>.</span><span class=n>Subscribe</span><span class=p>(</span><span class=n>msg</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>$&quot;Enemy {msg.EnemyId} spawned!&quot;</span><span class=p>))</span>
54
- </span><span id=__span-1-30><a id=__codelineno-1-30 name=__codelineno-1-30 href=#__codelineno-1-30></a><span class=w> </span><span class=p>.</span><span class=n>AddTo</span><span class=p>(</span><span class=k>this</span><span class=p>);</span><span class=w> </span><span class=c1>// Automatic cleanup on destroy</span>
55
- </span><span id=__span-1-31><a id=__codelineno-1-31 name=__codelineno-1-31 href=#__codelineno-1-31></a><span class=w> </span><span class=p>}</span>
56
- </span><span id=__span-1-32><a id=__codelineno-1-32 name=__codelineno-1-32 href=#__codelineno-1-32></a><span class=p>}</span>
57
- </span></code></pre></div> <h4 id=advanced-stream-transformations-reactive-programming>Advanced Stream Transformations (Reactive Programming)<a class=headerlink href=#advanced-stream-transformations-reactive-programming title="Anchor link to this section">&para;</a></h4> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-2-1><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=c1>// Double-click detection using reactive operators</span>
58
- </span><span id=__span-2-2><a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a><span class=n>Observable</span><span class=p>.</span><span class=n>EveryUpdate</span><span class=p>()</span>
59
- </span><span id=__span-2-3><a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a><span class=w> </span><span class=p>.</span><span class=n>Where</span><span class=p>(</span><span class=n>_</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Input</span><span class=p>.</span><span class=n>GetMouseButtonDown</span><span class=p>(</span><span class=mi>0</span><span class=p>))</span>
60
- </span><span id=__span-2-4><a id=__codelineno-2-4 name=__codelineno-2-4 href=#__codelineno-2-4></a><span class=w> </span><span class=p>.</span><span class=n>Buffer</span><span class=p>(</span><span class=n>Observable</span><span class=p>.</span><span class=n>Timer</span><span class=p>(</span><span class=n>TimeSpan</span><span class=p>.</span><span class=n>FromMilliseconds</span><span class=p>(</span><span class=mi>250</span><span class=p>)))</span>
61
- </span><span id=__span-2-5><a id=__codelineno-2-5 name=__codelineno-2-5 href=#__codelineno-2-5></a><span class=w> </span><span class=p>.</span><span class=n>Where</span><span class=p>(</span><span class=n>xs</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>xs</span><span class=p>.</span><span class=n>Count</span><span class=w> </span><span class=o>&gt;=</span><span class=w> </span><span class=mi>2</span><span class=p>)</span>
62
- </span><span id=__span-2-6><a id=__codelineno-2-6 name=__codelineno-2-6 href=#__codelineno-2-6></a><span class=w> </span><span class=p>.</span><span class=n>Subscribe</span><span class=p>(</span><span class=n>_</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Double Click!&quot;</span><span class=p>));</span>
63
- </span><span id=__span-2-7><a id=__codelineno-2-7 name=__codelineno-2-7 href=#__codelineno-2-7></a>
64
- </span><span id=__span-2-8><a id=__codelineno-2-8 name=__codelineno-2-8 href=#__codelineno-2-8></a><span class=c1>// Combine multiple input streams</span>
65
- </span><span id=__span-2-9><a id=__codelineno-2-9 name=__codelineno-2-9 href=#__codelineno-2-9></a><span class=kt>var</span><span class=w> </span><span class=n>leftClick</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Observable</span><span class=p>.</span><span class=n>EveryUpdate</span><span class=p>().</span><span class=n>Where</span><span class=p>(</span><span class=n>_</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Input</span><span class=p>.</span><span class=n>GetMouseButtonDown</span><span class=p>(</span><span class=mi>0</span><span class=p>));</span>
66
- </span><span id=__span-2-10><a id=__codelineno-2-10 name=__codelineno-2-10 href=#__codelineno-2-10></a><span class=kt>var</span><span class=w> </span><span class=n>rightClick</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Observable</span><span class=p>.</span><span class=n>EveryUpdate</span><span class=p>().</span><span class=n>Where</span><span class=p>(</span><span class=n>_</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Input</span><span class=p>.</span><span class=n>GetMouseButtonDown</span><span class=p>(</span><span class=mi>1</span><span class=p>));</span>
67
- </span><span id=__span-2-11><a id=__codelineno-2-11 name=__codelineno-2-11 href=#__codelineno-2-11></a><span class=n>leftClick</span><span class=p>.</span><span class=n>Merge</span><span class=p>(</span><span class=n>rightClick</span><span class=p>).</span><span class=n>Subscribe</span><span class=p>(</span><span class=n>_</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Any click!&quot;</span><span class=p>));</span>
68
- </span></code></pre></div> <h4 id=what-problems-it-solves>What Problems It Solves<a class=headerlink href=#what-problems-it-solves title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ <strong>Complex event streams:</strong> Chain, filter, combine, and transform events with operators</li> <li>✅ <strong>Async operations:</strong> Better async/await alternative with cancellation</li> <li>✅ <strong>Temporal logic:</strong> Time-based operations (throttle, debounce, sample)</li> <li>✅ <strong>UI reactivity:</strong> Bind UI elements to data streams reactively</li> <li>✅ <strong>Memory management:</strong> Disposable subscriptions prevent leaks</li> </ul> <h4 id=what-problems-it-doesnt-solve-well>What Problems It Doesn't Solve Well<a class=headerlink href=#what-problems-it-doesnt-solve-well title="Anchor link to this section">&para;</a></h4> <ul> <li>⚠️ <strong>Simple pub/sub:</strong> MessageBroker handles this well, but reactive operators may add complexity for simple use cases</li> <li>❌ <strong>Execution order control:</strong> No built-in priority system for handler ordering</li> <li>❌ <strong>Message validation/interception:</strong> No pre-processing pipeline to validate or transform messages before handlers</li> <li>❌ <strong>Unity Inspector debugging:</strong> No Inspector integration to visualize message flow</li> <li>❌ <strong>GameObject/Component targeting:</strong> Not designed for Unity-specific targeting patterns</li> <li>❌ <strong>Global message observation:</strong> Cannot easily listen to all instances of a message type across different sources</li> </ul> <h4 id=performance-characteristics>Performance Characteristics<a class=headerlink href=#performance-characteristics title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>Allocations:</strong> MessageBroker is zero-allocation for basic operations. Stream operators (Select, Where, Buffer) may allocate. For simple pub/sub, UniRx matches DxMessaging's allocation profile.</li> <li><strong>Overhead:</strong> Higher than simple events due to observable infrastructure</li> <li><strong>Use case:</strong> Best for complex event transformations; overhead justified by functionality</li> </ul> <h4 id=learning-curve>Learning Curve<a class=headerlink href=#learning-curve title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>Simple MessageBroker (basic pub/sub):</strong> Very easy - just <code>Publish()</code> and <code>Receive()</code>, similar to events</li> <li><strong>Advanced stream operators:</strong> Steep - requires understanding reactive programming paradigm</li> <li><strong>Mental model shift:</strong> For complex features, must think in streams, not events</li> <li><strong>Documentation:</strong> Extensive examples, but reactive concepts take time to master</li> <li><strong>Estimated learning time:</strong> 15 minutes for MessageBroker; 1-2 weeks for reactive stream mastery</li> </ul> <h4 id=ease-of-understanding>Ease of Understanding<a class=headerlink href=#ease-of-understanding title="Anchor link to this section">&para;</a></h4> <ul> <li>⭐⭐⭐⭐⭐ (Very easy) - MessageBroker pub/sub is intuitive and straightforward</li> <li>⭐⭐⭐ (Moderate to difficult) - Advanced reactive operators require learning</li> <li>Stream operator code is concise but requires understanding of reactive patterns</li> <li>Hard to debug complex observable chains without Rx knowledge</li> <li>For advanced features: Team buy-in essential; not intuitive for traditional event-driven developers</li> </ul> <h4 id=when-unirx-wins>When UniRx Wins<a class=headerlink href=#when-unirx-wins title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ Simple pub/sub with minimal setup (MessageBroker is straightforward)</li> <li>✅ Complex event transformations (e.g., double-click, gesture detection)</li> <li>✅ Combining multiple input sources</li> <li>✅ Time-based logic (debounce, throttle, sample)</li> <li>✅ UI data binding with reactive updates</li> <li>✅ Teams familiar with reactive programming</li> </ul> <h4 id=when-dxmessaging-wins>When DxMessaging Wins<a class=headerlink href=#when-dxmessaging-wins title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ Need Unity-specific features (GameObject targeting, lifecycle management)</li> <li>✅ Execution order matters (priority-based ordering)</li> <li>✅ Message validation/interception needed (interceptor pipeline)</li> <li>✅ Inspector debugging required (message history, registration view)</li> <li>✅ Direct GameObject/Component targeting</li> <li>✅ Global message observation (listen to all instances of a message type)</li> <li>✅ Late-stage processing (post-processors after all handlers)</li> <li>✅ Automatic lifecycle management (prevents common memory leaks)</li> <li>✅ Teams unfamiliar with reactive programming (and don't need reactive features)</li> </ul> <h4 id=direct-comparison>Direct Comparison<a class=headerlink href=#direct-comparison title="Anchor link to this section">&para;</a></h4> <table> <thead> <tr> <th>Aspect</th> <th>UniRx</th> <th>DxMessaging</th> </tr> </thead> <tbody> <tr> <td><strong>Primary Use Case</strong></td> <td>Stream transformations</td> <td>Pub/sub messaging</td> </tr> <tr> <td><strong>Unity Compatibility</strong></td> <td>✅ Built for Unity</td> <td>✅ Built for Unity</td> </tr> <tr> <td><strong>Dependencies</strong></td> <td>✅ Standalone</td> <td>✅ Standalone</td> </tr> <tr> <td><strong>Performance</strong></td> <td>18M ops/sec</td> <td>14M ops/sec</td> </tr> <tr> <td><strong>Allocations</strong></td> <td>⚠️ Can allocate</td> <td>✅ Zero (structs)</td> </tr> <tr> <td><strong>Learning Curve</strong></td> <td>⭐ Steep (Rx paradigm)</td> <td>⭐⭐⭐ Moderate</td> </tr> <tr> <td><strong>Setup Complexity</strong></td> <td>⭐⭐⭐⭐⭐ Low</td> <td>⭐⭐⭐⭐⭐ Plug-and-play</td> </tr> <tr> <td><strong>DI Integration</strong></td> <td>⚠️ Optional</td> <td>⚠️ Optional</td> </tr> <tr> <td><strong>Async/Await</strong></td> <td>✅ Observables</td> <td>⚠️ Manual</td> </tr> <tr> <td><strong>Type Safety</strong></td> <td>✅ Strong</td> <td>✅ Strong</td> </tr> <tr> <td><strong>Lifecycle Management</strong></td> <td>⚠️ Manual dispose</td> <td>✅ Automatic</td> </tr> <tr> <td><strong>Execution Order</strong></td> <td>❌ Not built-in</td> <td>✅ Priority-based</td> </tr> <tr> <td><strong>GameObject Targeting</strong></td> <td>❌ Not designed for</td> <td>✅ Built-in</td> </tr> <tr> <td><strong>Unity Integration</strong></td> <td>⭐⭐⭐⭐ Good (UI)</td> <td>⭐⭐⭐⭐⭐ Deep</td> </tr> <tr> <td><strong>Inspector Debugging</strong></td> <td>❌ No</td> <td>✅ History + stats</td> </tr> <tr> <td><strong>Interceptors</strong></td> <td>❌ Not built-in</td> <td>✅ Full pipeline</td> </tr> <tr> <td><strong>Global Observers</strong></td> <td>❌ Not built-in</td> <td>✅ Listen to all</td> </tr> <tr> <td><strong>Post-Processing</strong></td> <td>❌ Not built-in</td> <td>✅ Dedicated stage</td> </tr> <tr> <td><strong>Testability</strong></td> <td>⭐⭐⭐⭐ Good</td> <td>⭐⭐⭐⭐⭐ Excellent</td> </tr> <tr> <td><strong>Decoupling</strong></td> <td>⭐⭐⭐⭐⭐ Excellent</td> <td>⭐⭐⭐⭐⭐ Excellent</td> </tr> <tr> <td><strong>Temporal Operators</strong></td> <td>✅ Extensive (Rx)</td> <td>❌ Not built-in</td> </tr> <tr> <td><strong>Complex Stream Logic</strong></td> <td>✅ LINQ-style</td> <td>❌ Not designed for</td> </tr> </tbody> </table> <p><strong>Bottom Line:</strong> UniRx is well-suited for complex event stream transformations and reactive programming patterns, with MessageBroker providing straightforward pub/sub setup. DxMessaging focuses on straightforward pub/sub communication with control, validation, debugging, and Unity-specific features. Both are viable options depending on your needs: choose UniRx when you need stream operators, reactive patterns, or simple zero-setup pub/sub; choose DxMessaging when you need Unity-native lifecycle integration, execution control, and debugging tools.</p> <hr> <h3 id=messagepipe-high-performance-messaging>MessagePipe (High-Performance Messaging)<a class=headerlink href=#messagepipe-high-performance-messaging title="Anchor link to this section">&para;</a></h3> <p><strong>What It Is:</strong> A high-performance, DI-first messaging library by Cysharp (creators of UniTask). Designed for in-memory and distributed messaging with zero-allocation focus.</p> <p><strong>Core Philosophy:</strong> Maximum performance with dependency injection integration. Support all messaging patterns with a unified, generic interface.</p> <h4 id=key-features_1>Key Features<a class=headerlink href=#key-features_1 title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>Multiple patterns:</strong> Pub/Sub, Request/Response, Mediator patterns</li> <li><strong>Sync and async:</strong> Full async/await support with configurable strategies (sequential/parallel)</li> <li><strong>Keyed messaging:</strong> Type-based or key-based message routing</li> <li><strong>DI-first design:</strong> Deep integration with dependency injection containers</li> <li><strong>Filters:</strong> Pre/post execution customization (similar to interceptors)</li> <li><strong>Zero allocation:</strong> Struct messages with zero GC per publish</li> <li><strong>Roslyn analyzer:</strong> Detects subscription leaks at compile-time</li> <li><strong>Global and scoped:</strong> Support for global message bus or scoped instances</li> </ul> <h4 id=code-example_1>Code Example<a class=headerlink href=#code-example_1 title="Anchor link to this section">&para;</a></h4> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-3-1><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=c1>// Using MessagePipe with DI</span>
69
- </span><span id=__span-3-2><a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>GameManager</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
70
- </span><span id=__span-3-3><a id=__codelineno-3-3 name=__codelineno-3-3 href=#__codelineno-3-3></a><span class=p>{</span>
71
- </span><span id=__span-3-4><a id=__codelineno-3-4 name=__codelineno-3-4 href=#__codelineno-3-4></a><span class=w> </span><span class=k>private</span><span class=w> </span><span class=n>IPublisher</span><span class=o>&lt;</span><span class=n>EnemySpawned</span><span class=o>&gt;</span><span class=w> </span><span class=n>_publisher</span><span class=p>;</span>
72
- </span><span id=__span-3-5><a id=__codelineno-3-5 name=__codelineno-3-5 href=#__codelineno-3-5></a><span class=w> </span><span class=k>private</span><span class=w> </span><span class=n>IDisposable</span><span class=w> </span><span class=n>_subscription</span><span class=p>;</span>
73
- </span><span id=__span-3-6><a id=__codelineno-3-6 name=__codelineno-3-6 href=#__codelineno-3-6></a>
74
- </span><span id=__span-3-7><a id=__codelineno-3-7 name=__codelineno-3-7 href=#__codelineno-3-7></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Start</span><span class=p>()</span>
75
- </span><span id=__span-3-8><a id=__codelineno-3-8 name=__codelineno-3-8 href=#__codelineno-3-8></a><span class=w> </span><span class=p>{</span>
76
- </span><span id=__span-3-9><a id=__codelineno-3-9 name=__codelineno-3-9 href=#__codelineno-3-9></a><span class=w> </span><span class=c1>// Injected via DI container</span>
77
- </span><span id=__span-3-10><a id=__codelineno-3-10 name=__codelineno-3-10 href=#__codelineno-3-10></a><span class=w> </span><span class=n>_publisher</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>GlobalMessagePipe</span><span class=p>.</span><span class=n>GetPublisher</span><span class=o>&lt;</span><span class=n>EnemySpawned</span><span class=o>&gt;</span><span class=p>();</span>
78
- </span><span id=__span-3-11><a id=__codelineno-3-11 name=__codelineno-3-11 href=#__codelineno-3-11></a><span class=w> </span><span class=kt>var</span><span class=w> </span><span class=n>subscriber</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>GlobalMessagePipe</span><span class=p>.</span><span class=n>GetSubscriber</span><span class=o>&lt;</span><span class=n>EnemySpawned</span><span class=o>&gt;</span><span class=p>();</span>
79
- </span><span id=__span-3-12><a id=__codelineno-3-12 name=__codelineno-3-12 href=#__codelineno-3-12></a>
80
- </span><span id=__span-3-13><a id=__codelineno-3-13 name=__codelineno-3-13 href=#__codelineno-3-13></a><span class=w> </span><span class=n>_subscription</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>subscriber</span><span class=p>.</span><span class=n>Subscribe</span><span class=p>(</span><span class=n>msg</span><span class=w> </span><span class=o>=&gt;</span>
81
- </span><span id=__span-3-14><a id=__codelineno-3-14 name=__codelineno-3-14 href=#__codelineno-3-14></a><span class=w> </span><span class=p>{</span>
82
- </span><span id=__span-3-15><a id=__codelineno-3-15 name=__codelineno-3-15 href=#__codelineno-3-15></a><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>$&quot;Enemy spawned: {msg.EnemyId}&quot;</span><span class=p>);</span>
83
- </span><span id=__span-3-16><a id=__codelineno-3-16 name=__codelineno-3-16 href=#__codelineno-3-16></a><span class=w> </span><span class=p>});</span>
84
- </span><span id=__span-3-17><a id=__codelineno-3-17 name=__codelineno-3-17 href=#__codelineno-3-17></a><span class=w> </span><span class=p>}</span>
85
- </span><span id=__span-3-18><a id=__codelineno-3-18 name=__codelineno-3-18 href=#__codelineno-3-18></a>
86
- </span><span id=__span-3-19><a id=__codelineno-3-19 name=__codelineno-3-19 href=#__codelineno-3-19></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>SpawnEnemy</span><span class=p>(</span><span class=kt>int</span><span class=w> </span><span class=n>id</span><span class=p>)</span>
87
- </span><span id=__span-3-20><a id=__codelineno-3-20 name=__codelineno-3-20 href=#__codelineno-3-20></a><span class=w> </span><span class=p>{</span>
88
- </span><span id=__span-3-21><a id=__codelineno-3-21 name=__codelineno-3-21 href=#__codelineno-3-21></a><span class=w> </span><span class=n>_publisher</span><span class=p>.</span><span class=n>Publish</span><span class=p>(</span><span class=k>new</span><span class=w> </span><span class=n>EnemySpawned</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=n>EnemyId</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>id</span><span class=w> </span><span class=p>});</span>
89
- </span><span id=__span-3-22><a id=__codelineno-3-22 name=__codelineno-3-22 href=#__codelineno-3-22></a><span class=w> </span><span class=p>}</span>
90
- </span><span id=__span-3-23><a id=__codelineno-3-23 name=__codelineno-3-23 href=#__codelineno-3-23></a>
91
- </span><span id=__span-3-24><a id=__codelineno-3-24 name=__codelineno-3-24 href=#__codelineno-3-24></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnDestroy</span><span class=p>()</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>_subscription</span><span class=o>?.</span><span class=n>Dispose</span><span class=p>();</span>
92
- </span><span id=__span-3-25><a id=__codelineno-3-25 name=__codelineno-3-25 href=#__codelineno-3-25></a><span class=p>}</span>
93
- </span><span id=__span-3-26><a id=__codelineno-3-26 name=__codelineno-3-26 href=#__codelineno-3-26></a>
94
- </span><span id=__span-3-27><a id=__codelineno-3-27 name=__codelineno-3-27 href=#__codelineno-3-27></a><span class=c1>// Async handler with filters</span>
95
- </span><span id=__span-3-28><a id=__codelineno-3-28 name=__codelineno-3-28 href=#__codelineno-3-28></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>AchievementSystem</span>
96
- </span><span id=__span-3-29><a id=__codelineno-3-29 name=__codelineno-3-29 href=#__codelineno-3-29></a><span class=p>{</span>
97
- </span><span id=__span-3-30><a id=__codelineno-3-30 name=__codelineno-3-30 href=#__codelineno-3-30></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=nf>AchievementSystem</span><span class=p>(</span><span class=n>IAsyncSubscriber</span><span class=o>&lt;</span><span class=n>EnemyKilled</span><span class=o>&gt;</span><span class=w> </span><span class=n>subscriber</span><span class=p>)</span>
98
- </span><span id=__span-3-31><a id=__codelineno-3-31 name=__codelineno-3-31 href=#__codelineno-3-31></a><span class=w> </span><span class=p>{</span>
99
- </span><span id=__span-3-32><a id=__codelineno-3-32 name=__codelineno-3-32 href=#__codelineno-3-32></a><span class=w> </span><span class=n>subscriber</span><span class=p>.</span><span class=n>Subscribe</span><span class=p>(</span><span class=k>async</span><span class=w> </span><span class=p>(</span><span class=n>msg</span><span class=p>,</span><span class=w> </span><span class=n>cancellationToken</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span>
100
- </span><span id=__span-3-33><a id=__codelineno-3-33 name=__codelineno-3-33 href=#__codelineno-3-33></a><span class=w> </span><span class=p>{</span>
101
- </span><span id=__span-3-34><a id=__codelineno-3-34 name=__codelineno-3-34 href=#__codelineno-3-34></a><span class=w> </span><span class=k>await</span><span class=w> </span><span class=nf>SaveAchievementAsync</span><span class=p>(</span><span class=n>msg</span><span class=p>.</span><span class=n>EnemyType</span><span class=p>);</span>
102
- </span><span id=__span-3-35><a id=__codelineno-3-35 name=__codelineno-3-35 href=#__codelineno-3-35></a><span class=w> </span><span class=p>});</span>
103
- </span><span id=__span-3-36><a id=__codelineno-3-36 name=__codelineno-3-36 href=#__codelineno-3-36></a><span class=w> </span><span class=p>}</span>
104
- </span><span id=__span-3-37><a id=__codelineno-3-37 name=__codelineno-3-37 href=#__codelineno-3-37></a><span class=p>}</span>
105
- </span></code></pre></div> <h4 id=what-problems-it-solves_1>What Problems It Solves<a class=headerlink href=#what-problems-it-solves_1 title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ <strong>Performance:</strong> Zero allocations with struct-based messages (see <a href=https://github.com/wallstop/DxMessaging/tree/master/Tests/Runtime/Benchmarks>benchmarks</a> for comparison data)</li> <li>✅ <strong>DI integration:</strong> First-class support for dependency injection</li> <li>✅ <strong>Async messaging:</strong> Native async/await without blocking</li> <li>✅ <strong>Leak detection:</strong> Analyzer catches forgotten subscriptions at compile-time</li> <li>✅ <strong>Flexibility:</strong> Keyed, keyless, buffered, request/response patterns</li> <li>✅ <strong>Cross-platform:</strong> Works in Unity, .NET, Blazor, etc.</li> </ul> <h4 id=what-problems-it-doesnt-solve-well_1>What Problems It Doesn't Solve Well<a class=headerlink href=#what-problems-it-doesnt-solve-well_1 title="Anchor link to this section">&para;</a></h4> <ul> <li>❌ <strong>Unity-specific integration:</strong> No built-in Unity MonoBehaviour lifecycle management or GameObject targeting</li> <li>❌ <strong>Inspector debugging:</strong> No visual debugging or message history in Unity Inspector</li> <li>❌ <strong>Execution order control:</strong> No priority system (handlers execute in subscription order)</li> <li>❌ <strong>Setup complexity:</strong> Requires DI container configuration (VContainer/Zenject setup needed)</li> <li>❌ <strong>Global message observation:</strong> No built-in way to listen to all instances of a message across different keys/sources</li> <li>❌ <strong>Standalone use:</strong> Designed for DI-first architecture (less suitable for non-DI projects)</li> </ul> <h4 id=performance-characteristics_1>Performance Characteristics<a class=headerlink href=#performance-characteristics_1 title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>High throughput:</strong> MessagePipe is optimized for high-frequency messaging scenarios</li> <li><strong>Zero allocation:</strong> Struct-based messages with no GC per publish</li> <li><strong>Benchmark data:</strong> See performance section above for actual numbers</li> <li><strong>Use case:</strong> Optimized for high-frequency messaging (thousands/frame)</li> </ul> <h4 id=learning-curve_1>Learning Curve<a class=headerlink href=#learning-curve_1 title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>Moderate:</strong> Requires understanding of dependency injection</li> <li><strong>DI knowledge:</strong> Must be comfortable with service provider pattern</li> <li><strong>Generic interfaces:</strong> Multiple generic types can be confusing initially</li> <li><strong>Estimated learning time:</strong> 2-3 days with DI experience; 1 week without</li> </ul> <h4 id=ease-of-understanding_1>Ease of Understanding<a class=headerlink href=#ease-of-understanding_1 title="Anchor link to this section">&para;</a></h4> <ul> <li>⭐⭐⭐⭐ (Moderate)</li> <li>Clean, generic interfaces once you understand DI</li> <li>Code is straightforward for developers familiar with DI patterns</li> <li>Harder for teams without DI experience</li> </ul> <h4 id=when-messagepipe-wins>When MessagePipe Wins<a class=headerlink href=#when-messagepipe-wins title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ Performance-critical applications (high message throughput)</li> <li>✅ Projects already using DI (VContainer, Zenject, etc.)</li> <li>✅ Cross-platform .NET projects (not Unity-only)</li> <li>✅ Need async messaging with cancellation</li> <li>✅ Large-scale projects with DI architecture</li> <li>✅ Teams experienced with DI patterns</li> </ul> <h4 id=when-dxmessaging-wins_1>When DxMessaging Wins<a class=headerlink href=#when-dxmessaging-wins_1 title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ Unity-first projects (not cross-platform .NET)</li> <li>✅ Unity lifecycle management needed (automatic MonoBehaviour cleanup)</li> <li>✅ Inspector debugging essential (message history visualization)</li> <li>✅ Execution order control needed (priority-based handlers)</li> <li>✅ Message validation/interception required (interceptor pipeline)</li> <li>✅ Global message observation needed (listen to all message instances)</li> <li>✅ Post-processing stage needed (analytics, logging after handlers)</li> <li>✅ Teams without DI experience or projects not using DI</li> <li>✅ Plug-and-play simplicity preferred over DI configuration</li> </ul> <h4 id=direct-comparison_1>Direct Comparison<a class=headerlink href=#direct-comparison_1 title="Anchor link to this section">&para;</a></h4> <table> <thead> <tr> <th>Aspect</th> <th>MessagePipe</th> <th>DxMessaging</th> </tr> </thead> <tbody> <tr> <td><strong>Primary Use Case</strong></td> <td>High-perf DI messaging</td> <td>Pub/sub messaging</td> </tr> <tr> <td><strong>Unity Compatibility</strong></td> <td>✅ Built for Unity</td> <td>✅ Built for Unity</td> </tr> <tr> <td><strong>Dependencies</strong></td> <td>⚠️ DI container required</td> <td>✅ Standalone</td> </tr> <tr> <td><strong>Performance</strong></td> <td>97M ops/sec</td> <td>14M ops/sec</td> </tr> <tr> <td><strong>Allocations</strong></td> <td>✅ Zero (structs)</td> <td>✅ Zero (structs)</td> </tr> <tr> <td><strong>Learning Curve</strong></td> <td>⭐⭐⭐⭐ Moderate (DI)</td> <td>⭐⭐⭐ Moderate</td> </tr> <tr> <td><strong>Setup Complexity</strong></td> <td>⭐⭐⭐ DI setup required</td> <td>⭐⭐⭐⭐⭐ Plug-and-play</td> </tr> <tr> <td><strong>DI Integration</strong></td> <td>✅ First-class</td> <td>⚠️ Optional</td> </tr> <tr> <td><strong>Async/Await</strong></td> <td>✅ Native</td> <td>⚠️ Manual</td> </tr> <tr> <td><strong>Type Safety</strong></td> <td>✅ Strong</td> <td>✅ Strong</td> </tr> <tr> <td><strong>Lifecycle Management</strong></td> <td>⚠️ Manual dispose</td> <td>✅ Automatic</td> </tr> <tr> <td><strong>Execution Order</strong></td> <td>❌ Subscription order</td> <td>✅ Priority-based</td> </tr> <tr> <td><strong>GameObject Targeting</strong></td> <td>❌ Not built-in</td> <td>✅ Built-in</td> </tr> <tr> <td><strong>Unity Integration</strong></td> <td>⭐⭐⭐ Basic (no lifecycle)</td> <td>⭐⭐⭐⭐⭐ Deep</td> </tr> <tr> <td><strong>Inspector Debugging</strong></td> <td>❌ No</td> <td>✅ History + stats</td> </tr> <tr> <td><strong>Interceptors</strong></td> <td>⚠️ Filters</td> <td>✅ Full pipeline</td> </tr> <tr> <td><strong>Global Observers</strong></td> <td>❌ Not built-in</td> <td>✅ Listen to all</td> </tr> <tr> <td><strong>Post-Processing</strong></td> <td>⚠️ Via filters</td> <td>✅ Dedicated stage</td> </tr> <tr> <td><strong>Testability</strong></td> <td>⭐⭐⭐⭐⭐ DI mocking</td> <td>⭐⭐⭐⭐⭐ Local buses</td> </tr> <tr> <td><strong>Decoupling</strong></td> <td>⭐⭐⭐⭐⭐ Excellent</td> <td>⭐⭐⭐⭐⭐ Excellent</td> </tr> <tr> <td><strong>Leak Detection</strong></td> <td>✅ Roslyn analyzer</td> <td>✅ Automatic lifecycle</td> </tr> </tbody> </table> <p><strong>Bottom Line:</strong> MessagePipe is the performance king with DI-first design. DxMessaging is Unity-first with lifecycle awareness and debugging. Use MessagePipe if you have DI infrastructure and need maximum performance. Use DxMessaging if you want Unity-native messaging with automatic lifecycle management.</p> <p><strong>Note on Performance:</strong> MessagePipe's ~95M ops/sec vs DxMessaging's ~20M ops/sec shows a significant throughput advantage. This matters primarily for high-frequency messaging scenarios (thousands of messages per frame). For typical gameplay events, both are fast enough that performance is not a distinguishing factor.</p> <blockquote> <p><strong>💡 Want both?</strong> DxMessaging integrates with DI frameworks! See <a href=../../integrations/ >DI Integration Guides</a> for Zenject, VContainer, and Reflex. Use DI for service construction, DxMessaging for event communication.</p> </blockquote> <hr> <h3 id=zenject-signals-di-based-messaging>Zenject Signals (DI-Based Messaging)<a class=headerlink href=#zenject-signals-di-based-messaging title="Anchor link to this section">&para;</a></h3> <p><strong>What It Is:</strong> The built-in messaging system for Zenject (Extenject), a dependency injection framework for Unity. Signals are an optional extension that provides decoupled communication.</p> <p><strong>Core Philosophy:</strong> Loosely coupled messaging integrated with dependency injection. Reduce direct dependencies between classes while maintaining testability.</p> <h4 id=key-features_2>Key Features<a class=headerlink href=#key-features_2 title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>DI-integrated:</strong> Signals declared and resolved via Zenject container</li> <li><strong>Typed signals:</strong> Strongly-typed signal classes with parameters</li> <li><strong>Synchronous and async:</strong> Sync (RunSync) and async (RunAsync) execution modes</li> <li><strong>Subscription modes:</strong> Require, optional, or optional-with-warning subscribers</li> <li><strong>Installer-based setup:</strong> Declare signals in installers for container binding</li> <li><strong>Multiple subscription methods:</strong> Direct binding, SignalBus subscription, stream-based (with UniRx)</li> <li><strong>Testable:</strong> Easy to mock and test with dependency injection</li> </ul> <h4 id=code-example_2>Code Example<a class=headerlink href=#code-example_2 title="Anchor link to this section">&para;</a></h4> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-4-1><a id=__codelineno-4-1 name=__codelineno-4-1 href=#__codelineno-4-1></a><span class=c1>// 1. Define signal</span>
106
- </span><span id=__span-4-2><a id=__codelineno-4-2 name=__codelineno-4-2 href=#__codelineno-4-2></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>EnemyKilledSignal</span>
107
- </span><span id=__span-4-3><a id=__codelineno-4-3 name=__codelineno-4-3 href=#__codelineno-4-3></a><span class=p>{</span>
108
- </span><span id=__span-4-4><a id=__codelineno-4-4 name=__codelineno-4-4 href=#__codelineno-4-4></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=kt>string</span><span class=w> </span><span class=n>EnemyType</span><span class=p>;</span>
109
- </span><span id=__span-4-5><a id=__codelineno-4-5 name=__codelineno-4-5 href=#__codelineno-4-5></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>Score</span><span class=p>;</span>
110
- </span><span id=__span-4-6><a id=__codelineno-4-6 name=__codelineno-4-6 href=#__codelineno-4-6></a><span class=p>}</span>
111
- </span><span id=__span-4-7><a id=__codelineno-4-7 name=__codelineno-4-7 href=#__codelineno-4-7></a>
112
- </span><span id=__span-4-8><a id=__codelineno-4-8 name=__codelineno-4-8 href=#__codelineno-4-8></a><span class=c1>// 2. Install and declare in installer</span>
113
- </span><span id=__span-4-9><a id=__codelineno-4-9 name=__codelineno-4-9 href=#__codelineno-4-9></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>GameInstaller</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoInstaller</span>
114
- </span><span id=__span-4-10><a id=__codelineno-4-10 name=__codelineno-4-10 href=#__codelineno-4-10></a><span class=p>{</span>
115
- </span><span id=__span-4-11><a id=__codelineno-4-11 name=__codelineno-4-11 href=#__codelineno-4-11></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>InstallBindings</span><span class=p>()</span>
116
- </span><span id=__span-4-12><a id=__codelineno-4-12 name=__codelineno-4-12 href=#__codelineno-4-12></a><span class=w> </span><span class=p>{</span>
117
- </span><span id=__span-4-13><a id=__codelineno-4-13 name=__codelineno-4-13 href=#__codelineno-4-13></a><span class=w> </span><span class=n>SignalBusInstaller</span><span class=p>.</span><span class=n>Install</span><span class=p>(</span><span class=n>Container</span><span class=p>);</span>
118
- </span><span id=__span-4-14><a id=__codelineno-4-14 name=__codelineno-4-14 href=#__codelineno-4-14></a><span class=w> </span><span class=n>Container</span><span class=p>.</span><span class=n>DeclareSignal</span><span class=o>&lt;</span><span class=n>EnemyKilledSignal</span><span class=o>&gt;</span><span class=p>();</span>
119
- </span><span id=__span-4-15><a id=__codelineno-4-15 name=__codelineno-4-15 href=#__codelineno-4-15></a><span class=w> </span><span class=n>Container</span><span class=p>.</span><span class=n>BindSignal</span><span class=o>&lt;</span><span class=n>EnemyKilledSignal</span><span class=o>&gt;</span><span class=p>()</span>
120
- </span><span id=__span-4-16><a id=__codelineno-4-16 name=__codelineno-4-16 href=#__codelineno-4-16></a><span class=w> </span><span class=p>.</span><span class=n>ToMethod</span><span class=o>&lt;</span><span class=n>AchievementSystem</span><span class=o>&gt;</span><span class=p>(</span><span class=n>x</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>x</span><span class=p>.</span><span class=n>OnEnemyKilled</span><span class=p>)</span>
121
- </span><span id=__span-4-17><a id=__codelineno-4-17 name=__codelineno-4-17 href=#__codelineno-4-17></a><span class=w> </span><span class=p>.</span><span class=n>FromResolve</span><span class=p>();</span>
122
- </span><span id=__span-4-18><a id=__codelineno-4-18 name=__codelineno-4-18 href=#__codelineno-4-18></a><span class=w> </span><span class=p>}</span>
123
- </span><span id=__span-4-19><a id=__codelineno-4-19 name=__codelineno-4-19 href=#__codelineno-4-19></a><span class=p>}</span>
124
- </span><span id=__span-4-20><a id=__codelineno-4-20 name=__codelineno-4-20 href=#__codelineno-4-20></a>
125
- </span><span id=__span-4-21><a id=__codelineno-4-21 name=__codelineno-4-21 href=#__codelineno-4-21></a><span class=c1>// 3. Fire signal</span>
126
- </span><span id=__span-4-22><a id=__codelineno-4-22 name=__codelineno-4-22 href=#__codelineno-4-22></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>Enemy</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
127
- </span><span id=__span-4-23><a id=__codelineno-4-23 name=__codelineno-4-23 href=#__codelineno-4-23></a><span class=p>{</span>
128
- </span><span id=__span-4-24><a id=__codelineno-4-24 name=__codelineno-4-24 href=#__codelineno-4-24></a><span class=w> </span><span class=na>[Inject]</span><span class=w> </span><span class=k>private</span><span class=w> </span><span class=n>SignalBus</span><span class=w> </span><span class=n>_signalBus</span><span class=p>;</span>
129
- </span><span id=__span-4-25><a id=__codelineno-4-25 name=__codelineno-4-25 href=#__codelineno-4-25></a>
130
- </span><span id=__span-4-26><a id=__codelineno-4-26 name=__codelineno-4-26 href=#__codelineno-4-26></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Die</span><span class=p>()</span>
131
- </span><span id=__span-4-27><a id=__codelineno-4-27 name=__codelineno-4-27 href=#__codelineno-4-27></a><span class=w> </span><span class=p>{</span>
132
- </span><span id=__span-4-28><a id=__codelineno-4-28 name=__codelineno-4-28 href=#__codelineno-4-28></a><span class=w> </span><span class=n>_signalBus</span><span class=p>.</span><span class=n>Fire</span><span class=p>(</span><span class=k>new</span><span class=w> </span><span class=n>EnemyKilledSignal</span>
133
- </span><span id=__span-4-29><a id=__codelineno-4-29 name=__codelineno-4-29 href=#__codelineno-4-29></a><span class=w> </span><span class=p>{</span>
134
- </span><span id=__span-4-30><a id=__codelineno-4-30 name=__codelineno-4-30 href=#__codelineno-4-30></a><span class=w> </span><span class=n>EnemyType</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=s>&quot;Orc&quot;</span><span class=p>,</span>
135
- </span><span id=__span-4-31><a id=__codelineno-4-31 name=__codelineno-4-31 href=#__codelineno-4-31></a><span class=w> </span><span class=n>Score</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mi>100</span>
136
- </span><span id=__span-4-32><a id=__codelineno-4-32 name=__codelineno-4-32 href=#__codelineno-4-32></a><span class=w> </span><span class=p>});</span>
137
- </span><span id=__span-4-33><a id=__codelineno-4-33 name=__codelineno-4-33 href=#__codelineno-4-33></a><span class=w> </span><span class=p>}</span>
138
- </span><span id=__span-4-34><a id=__codelineno-4-34 name=__codelineno-4-34 href=#__codelineno-4-34></a><span class=p>}</span>
139
- </span><span id=__span-4-35><a id=__codelineno-4-35 name=__codelineno-4-35 href=#__codelineno-4-35></a>
140
- </span><span id=__span-4-36><a id=__codelineno-4-36 name=__codelineno-4-36 href=#__codelineno-4-36></a><span class=c1>// 4. Subscribe to signal</span>
141
- </span><span id=__span-4-37><a id=__codelineno-4-37 name=__codelineno-4-37 href=#__codelineno-4-37></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>AchievementSystem</span>
142
- </span><span id=__span-4-38><a id=__codelineno-4-38 name=__codelineno-4-38 href=#__codelineno-4-38></a><span class=p>{</span>
143
- </span><span id=__span-4-39><a id=__codelineno-4-39 name=__codelineno-4-39 href=#__codelineno-4-39></a><span class=w> </span><span class=na>[Inject]</span><span class=w> </span><span class=k>private</span><span class=w> </span><span class=n>SignalBus</span><span class=w> </span><span class=n>_signalBus</span><span class=p>;</span>
144
- </span><span id=__span-4-40><a id=__codelineno-4-40 name=__codelineno-4-40 href=#__codelineno-4-40></a>
145
- </span><span id=__span-4-41><a id=__codelineno-4-41 name=__codelineno-4-41 href=#__codelineno-4-41></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Initialize</span><span class=p>()</span>
146
- </span><span id=__span-4-42><a id=__codelineno-4-42 name=__codelineno-4-42 href=#__codelineno-4-42></a><span class=w> </span><span class=p>{</span>
147
- </span><span id=__span-4-43><a id=__codelineno-4-43 name=__codelineno-4-43 href=#__codelineno-4-43></a><span class=w> </span><span class=n>_signalBus</span><span class=p>.</span><span class=n>Subscribe</span><span class=o>&lt;</span><span class=n>EnemyKilledSignal</span><span class=o>&gt;</span><span class=p>(</span><span class=n>OnEnemyKilled</span><span class=p>);</span>
148
- </span><span id=__span-4-44><a id=__codelineno-4-44 name=__codelineno-4-44 href=#__codelineno-4-44></a><span class=w> </span><span class=p>}</span>
149
- </span><span id=__span-4-45><a id=__codelineno-4-45 name=__codelineno-4-45 href=#__codelineno-4-45></a>
150
- </span><span id=__span-4-46><a id=__codelineno-4-46 name=__codelineno-4-46 href=#__codelineno-4-46></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnEnemyKilled</span><span class=p>(</span><span class=n>EnemyKilledSignal</span><span class=w> </span><span class=n>signal</span><span class=p>)</span>
151
- </span><span id=__span-4-47><a id=__codelineno-4-47 name=__codelineno-4-47 href=#__codelineno-4-47></a><span class=w> </span><span class=p>{</span>
152
- </span><span id=__span-4-48><a id=__codelineno-4-48 name=__codelineno-4-48 href=#__codelineno-4-48></a><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>$&quot;Killed {signal.EnemyType} for {signal.Score} points!&quot;</span><span class=p>);</span>
153
- </span><span id=__span-4-49><a id=__codelineno-4-49 name=__codelineno-4-49 href=#__codelineno-4-49></a><span class=w> </span><span class=p>}</span>
154
- </span><span id=__span-4-50><a id=__codelineno-4-50 name=__codelineno-4-50 href=#__codelineno-4-50></a><span class=p>}</span>
155
- </span></code></pre></div> <h4 id=what-problems-it-solves_2>What Problems It Solves<a class=headerlink href=#what-problems-it-solves_2 title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ <strong>Decoupling:</strong> Classes communicate without direct references</li> <li>✅ <strong>DI integration:</strong> Seamless with Zenject dependency injection</li> <li>✅ <strong>Testability:</strong> Easy to mock SignalBus in tests</li> <li>✅ <strong>Type safety:</strong> Strongly-typed signal classes</li> <li>✅ <strong>Subscriber validation:</strong> Can enforce required subscribers</li> <li>✅ <strong>Async support:</strong> Fire signals synchronously or asynchronously</li> </ul> <h4 id=what-problems-it-doesnt-solve-well_2>What Problems It Doesn't Solve Well<a class=headerlink href=#what-problems-it-doesnt-solve-well_2 title="Anchor link to this section">&para;</a></h4> <ul> <li>❌ <strong>Zenject dependency:</strong> Must use Zenject/Extenject framework; not standalone</li> <li>❌ <strong>Performance overhead:</strong> Higher than lightweight messaging (DI resolution cost)</li> <li>❌ <strong>Execution order control:</strong> No priority system for handler ordering</li> <li>❌ <strong>Inspector debugging:</strong> No visual message history or flow visualization</li> <li>❌ <strong>Allocations:</strong> Signal parameters can cause allocations depending on usage</li> <li>❌ <strong>Validation pipeline:</strong> No built-in interceptor or pre-processing stage</li> <li>❌ <strong>Global observation:</strong> Cannot easily listen to all signal fires across the system</li> <li>❌ <strong>Post-processing:</strong> No dedicated after-handler stage for analytics/logging</li> </ul> <h4 id=performance-characteristics_2>Performance Characteristics<a class=headerlink href=#performance-characteristics_2 title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>Overhead:</strong> Higher than lightweight messaging (DI resolution + boxing)</li> <li><strong>Allocations:</strong> Signal parameters can cause allocations (depends on implementation)</li> <li><strong>Benchmark data:</strong> See performance section above for actual numbers</li> <li><strong>Use case:</strong> Performance trade-off for testability and DI benefits</li> </ul> <h4 id=learning-curve_2>Learning Curve<a class=headerlink href=#learning-curve_2 title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>Moderate to steep:</strong> Requires understanding Zenject dependency injection</li> <li><strong>Zenject knowledge:</strong> Must learn Zenject before signals</li> <li><strong>Setup overhead:</strong> Installers, bindings, container configuration</li> <li><strong>Estimated learning time:</strong> 1 week for Zenject + signals together</li> </ul> <h4 id=ease-of-understanding_2>Ease of Understanding<a class=headerlink href=#ease-of-understanding_2 title="Anchor link to this section">&para;</a></h4> <ul> <li>⭐⭐⭐ (Moderate)</li> <li>Clear once you understand Zenject</li> <li>Signal concept is straightforward</li> <li>Setup (installers, bindings) adds complexity</li> </ul> <h4 id=when-zenject-signals-win>When Zenject Signals Win<a class=headerlink href=#when-zenject-signals-win title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ Already using Zenject for dependency injection</li> <li>✅ Testability is critical (DI makes mocking easy)</li> <li>✅ Need subscriber validation (ensure handlers exist)</li> <li>✅ Team experienced with Zenject</li> <li>✅ Want DI-managed lifecycle</li> </ul> <h4 id=when-dxmessaging-wins_2>When DxMessaging Wins<a class=headerlink href=#when-dxmessaging-wins_2 title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ Not using Zenject/Extenject (or prefer standalone solution)</li> <li>✅ Performance critical (lower overhead than DI-based signals)</li> <li>✅ Execution order control needed (priority-based handlers)</li> <li>✅ Inspector debugging required (message history visualization)</li> <li>✅ Message validation/interception needed (interceptor pipeline)</li> <li>✅ Global message observation needed (listen to all signal fires)</li> <li>✅ Post-processing stage needed (analytics after handlers)</li> <li>✅ Zero-allocation messaging essential (struct-based)</li> <li>✅ GameObject/Component targeting needed (Unity-specific patterns)</li> <li>✅ Plug-and-play simplicity preferred over DI setup</li> </ul> <h4 id=direct-comparison_2>Direct Comparison<a class=headerlink href=#direct-comparison_2 title="Anchor link to this section">&para;</a></h4> <table> <thead> <tr> <th>Aspect</th> <th>Zenject Signals</th> <th>DxMessaging</th> </tr> </thead> <tbody> <tr> <td><strong>Primary Use Case</strong></td> <td>DI-integrated messaging</td> <td>Pub/sub messaging</td> </tr> <tr> <td><strong>Unity Compatibility</strong></td> <td>✅ Built for Unity</td> <td>✅ Built for Unity</td> </tr> <tr> <td><strong>Dependencies</strong></td> <td>❌ Zenject required</td> <td>✅ Standalone</td> </tr> <tr> <td><strong>Performance</strong></td> <td>2.5M ops/sec</td> <td>14M ops/sec</td> </tr> <tr> <td><strong>Allocations</strong></td> <td>⚠️ Can allocate</td> <td>✅ Zero (structs)</td> </tr> <tr> <td><strong>Learning Curve</strong></td> <td>⭐⭐ Steep (Zenject+Signals)</td> <td>⭐⭐⭐ Moderate</td> </tr> <tr> <td><strong>Setup Complexity</strong></td> <td>⭐⭐ Installers required</td> <td>⭐⭐⭐⭐⭐ Plug-and-play</td> </tr> <tr> <td><strong>DI Integration</strong></td> <td>✅ Required (Zenject)</td> <td>⚠️ Optional</td> </tr> <tr> <td><strong>Async/Await</strong></td> <td>✅ RunAsync support</td> <td>⚠️ Manual</td> </tr> <tr> <td><strong>Type Safety</strong></td> <td>✅ Strong</td> <td>✅ Strong</td> </tr> <tr> <td><strong>Lifecycle Management</strong></td> <td>⚠️ DI-managed</td> <td>✅ Automatic</td> </tr> <tr> <td><strong>Execution Order</strong></td> <td>❌ Not built-in</td> <td>✅ Priority-based</td> </tr> <tr> <td><strong>GameObject Targeting</strong></td> <td>❌ Not built-in</td> <td>✅ Built-in</td> </tr> <tr> <td><strong>Unity Integration</strong></td> <td>⭐⭐⭐⭐ DI-managed</td> <td>⭐⭐⭐⭐⭐ Deep</td> </tr> <tr> <td><strong>Inspector Debugging</strong></td> <td>❌ No</td> <td>✅ History + stats</td> </tr> <tr> <td><strong>Interceptors</strong></td> <td>⚠️ Subscriber validation</td> <td>✅ Full pipeline</td> </tr> <tr> <td><strong>Global Observers</strong></td> <td>❌ Not built-in</td> <td>✅ Listen to all</td> </tr> <tr> <td><strong>Post-Processing</strong></td> <td>❌ Not built-in</td> <td>✅ Dedicated stage</td> </tr> <tr> <td><strong>Testability</strong></td> <td>⭐⭐⭐⭐⭐ DI mocking</td> <td>⭐⭐⭐⭐⭐ Local buses</td> </tr> <tr> <td><strong>Decoupling</strong></td> <td>⭐⭐⭐⭐⭐ Excellent</td> <td>⭐⭐⭐⭐⭐ Excellent</td> </tr> </tbody> </table> <p><strong>Bottom Line:</strong> Zenject Signals are well-suited if you're already invested in Zenject and value testability through DI. DxMessaging offers standalone messaging without requiring DI setup, and includes Unity-specific features.</p> <blockquote> <p><strong>💡 Using Zenject?</strong> DxMessaging integrates with Zenject! See <a href=../../integrations/zenject/ >DxMessaging + Zenject Integration Guide</a> for step-by-step setup. Get DxMessaging's features (priorities, interceptors, Inspector debugging) with Zenject's DI.</p> </blockquote> <hr> <h2 id=scriptable-object-architecture-soa>Scriptable Object Architecture (SOA)<a class=headerlink href=#scriptable-object-architecture-soa title="Anchor link to this section">&para;</a></h2> <p><strong>What It Is:</strong> A Unity-specific pattern popularized by Ryan Hipple's <a href="https://www.youtube.com/watch?v=raQ3iHhE_Kk">Unite 2017 talk</a> that uses ScriptableObject assets for runtime communication (GameEvent, FloatVariable, etc.).</p> <p><strong>Core Philosophy:</strong> Designer-driven, asset-based communication where systems communicate through serialized SO assets instead of direct references.</p> <p><strong>⚠️ Contested Pattern:</strong> SOA has both proponents and critics. Supporters value its designer-friendly workflow and Inspector-based event wiring. Critics raise concerns about scalability and maintainability at scale. See <a href=https://github.com/cathei/AntiScriptableObjectArchitecture>Anti-ScriptableObject Architecture</a> for one perspective on the criticisms. Unity recommends ScriptableObjects for <strong>immutable design data</strong>, not mutable runtime state.</p> <h3 id=quick-comparison>Quick Comparison<a class=headerlink href=#quick-comparison title="Anchor link to this section">&para;</a></h3> <table> <thead> <tr> <th>Aspect</th> <th>SOA (GameEvent/Variables)</th> <th>DxMessaging</th> </tr> </thead> <tbody> <tr> <td><strong>Designer Control</strong></td> <td>✅ High (create events in Inspector)</td> <td>❌ Low (code-driven)</td> </tr> <tr> <td><strong>Type Safety</strong></td> <td>⚠️ Mixed (SO refs typed, but UnityEvent wiring loses compile-time safety)</td> <td>✅ Strong (compile-time validation)</td> </tr> <tr> <td><strong>Lifecycle</strong></td> <td>⚠️ Manual (assets persist)</td> <td>✅ Automatic (tokens clean up)</td> </tr> <tr> <td><strong>Performance</strong></td> <td>⚠️ List iteration, UnityAction overhead</td> <td>✅ Zero-allocation structs</td> </tr> <tr> <td><strong>Testability</strong></td> <td>⚠️ Requires SO asset cleanup</td> <td>✅ Isolated buses per test</td> </tr> </tbody> </table> <h3 id=when-to-use-each>When to Use Each<a class=headerlink href=#when-to-use-each title="Anchor link to this section">&para;</a></h3> <h4 id=choose-soa-when>Choose SOA when<a class=headerlink href=#choose-soa-when title="Anchor link to this section">&para;</a></h4> <ul> <li>Designers need to create and wire events in the Inspector without code</li> <li>Your team is already deeply invested in SOA with existing assets</li> <li>Designer empowerment is more important than code maintainability</li> </ul> <h5 id=choose-dxmessaging-when>Choose DxMessaging when<a class=headerlink href=#choose-dxmessaging-when title="Anchor link to this section">&para;</a></h5> <ul> <li>You need type-safe, code-driven messaging</li> <li>Performance and zero-allocation are priorities</li> <li>You want automatic lifecycle management</li> <li>You need interceptors, priorities, or global observers</li> </ul> <h6 id=use-both-when>Use Both when<a class=headerlink href=#use-both-when title="Anchor link to this section">&para;</a></h6> <ul> <li>ScriptableObjects for <strong>immutable config data</strong> (weapon stats, level configs)</li> <li>DxMessaging for <strong>runtime events and communication</strong></li> <li>This is the recommended approach - use each tool correctly</li> </ul> <h3 id=full-comparison-guide>Full Comparison Guide<a class=headerlink href=#full-comparison-guide title="Anchor link to this section">&para;</a></h3> <p>For detailed migration patterns, interoperability strategies, and code examples, see:</p> <h4 id=-soa-compatibility-guide>→ <a href=../../guides/patterns/#14-compatibility-with-scriptable-object-architecture-soa>SOA Compatibility Guide</a><a class=headerlink href=#-soa-compatibility-guide title="Anchor link to this section">&para;</a></h4> <p>Includes:</p> <ul> <li>Pattern A: Bridging SOA GameEvents to DxMessaging</li> <li>Pattern B: Proper ScriptableObject usage (configs + messaging)</li> <li>Migration path from SOA to DxMessaging</li> <li>When to keep using ScriptableObjects</li> </ul> <h5 id=resources>Resources<a class=headerlink href=#resources title="Anchor link to this section">&para;</a></h5> <ul> <li><a href="https://www.youtube.com/watch?v=raQ3iHhE_Kk">Unite 2017 Talk</a> - Original SOA presentation</li> <li><a href=https://github.com/cathei/AntiScriptableObjectArchitecture>Anti-SOA Critique</a> - Detailed criticisms</li> <li><a href=https://unity.com/how-to/architect-game-code-scriptable-objects>Unity Official Guide</a> - Unity's perspective</li> </ul> <hr> <h2 id=traditional-approaches>Traditional Approaches<a class=headerlink href=#traditional-approaches title="Anchor link to this section">&para;</a></h2> <h3 id=standard-c-eventsactions>Standard C# Events/Actions<a class=headerlink href=#standard-c-eventsactions title="Anchor link to this section">&para;</a></h3> <p><strong>What It Is:</strong> C#'s built-in event and delegate system. The default way to handle callbacks and notifications in .NET and Unity.</p> <p><strong>Core Philosophy:</strong> Direct, type-safe callbacks between objects. Simple, familiar, and built into the language.</p> <h4 id=key-features_3>Key Features<a class=headerlink href=#key-features_3 title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>Language-native:</strong> Built into C#, no dependencies</li> <li><strong>Type-safe:</strong> Compile-time checking of event signatures</li> <li><strong>Return values:</strong> Events can return values and use <code>out</code> parameters</li> <li><strong>Inline lambdas:</strong> Subscribe with anonymous functions</li> <li><strong>Multicast:</strong> Multiple subscribers per event</li> <li><strong>Fast:</strong> Direct method invocation with minimal overhead</li> </ul> <h4 id=code-example_3>Code Example<a class=headerlink href=#code-example_3 title="Anchor link to this section">&para;</a></h4> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-5-1><a id=__codelineno-5-1 name=__codelineno-5-1 href=#__codelineno-5-1></a><span class=c1>// Define and use C# events</span>
156
- </span><span id=__span-5-2><a id=__codelineno-5-2 name=__codelineno-5-2 href=#__codelineno-5-2></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>GameManager</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
157
- </span><span id=__span-5-3><a id=__codelineno-5-3 name=__codelineno-5-3 href=#__codelineno-5-3></a><span class=p>{</span>
158
- </span><span id=__span-5-4><a id=__codelineno-5-4 name=__codelineno-5-4 href=#__codelineno-5-4></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>event</span><span class=w> </span><span class=n>Action</span><span class=o>&lt;</span><span class=kt>int</span><span class=o>&gt;</span><span class=w> </span><span class=n>OnScoreChanged</span><span class=p>;</span>
159
- </span><span id=__span-5-5><a id=__codelineno-5-5 name=__codelineno-5-5 href=#__codelineno-5-5></a>
160
- </span><span id=__span-5-6><a id=__codelineno-5-6 name=__codelineno-5-6 href=#__codelineno-5-6></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>AddScore</span><span class=p>(</span><span class=kt>int</span><span class=w> </span><span class=n>points</span><span class=p>)</span>
161
- </span><span id=__span-5-7><a id=__codelineno-5-7 name=__codelineno-5-7 href=#__codelineno-5-7></a><span class=w> </span><span class=p>{</span>
162
- </span><span id=__span-5-8><a id=__codelineno-5-8 name=__codelineno-5-8 href=#__codelineno-5-8></a><span class=w> </span><span class=n>OnScoreChanged</span><span class=o>?.</span><span class=n>Invoke</span><span class=p>(</span><span class=n>points</span><span class=p>);</span>
163
- </span><span id=__span-5-9><a id=__codelineno-5-9 name=__codelineno-5-9 href=#__codelineno-5-9></a><span class=w> </span><span class=p>}</span>
164
- </span><span id=__span-5-10><a id=__codelineno-5-10 name=__codelineno-5-10 href=#__codelineno-5-10></a><span class=p>}</span>
165
- </span><span id=__span-5-11><a id=__codelineno-5-11 name=__codelineno-5-11 href=#__codelineno-5-11></a>
166
- </span><span id=__span-5-12><a id=__codelineno-5-12 name=__codelineno-5-12 href=#__codelineno-5-12></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>UI</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
167
- </span><span id=__span-5-13><a id=__codelineno-5-13 name=__codelineno-5-13 href=#__codelineno-5-13></a><span class=p>{</span>
168
- </span><span id=__span-5-14><a id=__codelineno-5-14 name=__codelineno-5-14 href=#__codelineno-5-14></a><span class=w> </span><span class=na>[SerializeField]</span><span class=w> </span><span class=k>private</span><span class=w> </span><span class=n>GameManager</span><span class=w> </span><span class=n>gameManager</span><span class=p>;</span>
169
- </span><span id=__span-5-15><a id=__codelineno-5-15 name=__codelineno-5-15 href=#__codelineno-5-15></a>
170
- </span><span id=__span-5-16><a id=__codelineno-5-16 name=__codelineno-5-16 href=#__codelineno-5-16></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnEnable</span><span class=p>()</span>
171
- </span><span id=__span-5-17><a id=__codelineno-5-17 name=__codelineno-5-17 href=#__codelineno-5-17></a><span class=w> </span><span class=p>{</span>
172
- </span><span id=__span-5-18><a id=__codelineno-5-18 name=__codelineno-5-18 href=#__codelineno-5-18></a><span class=w> </span><span class=n>gameManager</span><span class=p>.</span><span class=n>OnScoreChanged</span><span class=w> </span><span class=o>+=</span><span class=w> </span><span class=n>UpdateScore</span><span class=p>;</span>
173
- </span><span id=__span-5-19><a id=__codelineno-5-19 name=__codelineno-5-19 href=#__codelineno-5-19></a><span class=w> </span><span class=p>}</span>
174
- </span><span id=__span-5-20><a id=__codelineno-5-20 name=__codelineno-5-20 href=#__codelineno-5-20></a>
175
- </span><span id=__span-5-21><a id=__codelineno-5-21 name=__codelineno-5-21 href=#__codelineno-5-21></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnDisable</span><span class=p>()</span>
176
- </span><span id=__span-5-22><a id=__codelineno-5-22 name=__codelineno-5-22 href=#__codelineno-5-22></a><span class=w> </span><span class=p>{</span>
177
- </span><span id=__span-5-23><a id=__codelineno-5-23 name=__codelineno-5-23 href=#__codelineno-5-23></a><span class=w> </span><span class=n>gameManager</span><span class=p>.</span><span class=n>OnScoreChanged</span><span class=w> </span><span class=o>-=</span><span class=w> </span><span class=n>UpdateScore</span><span class=p>;</span>
178
- </span><span id=__span-5-24><a id=__codelineno-5-24 name=__codelineno-5-24 href=#__codelineno-5-24></a><span class=w> </span><span class=p>}</span>
179
- </span><span id=__span-5-25><a id=__codelineno-5-25 name=__codelineno-5-25 href=#__codelineno-5-25></a>
180
- </span><span id=__span-5-26><a id=__codelineno-5-26 name=__codelineno-5-26 href=#__codelineno-5-26></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>UpdateScore</span><span class=p>(</span><span class=kt>int</span><span class=w> </span><span class=n>points</span><span class=p>)</span>
181
- </span><span id=__span-5-27><a id=__codelineno-5-27 name=__codelineno-5-27 href=#__codelineno-5-27></a><span class=w> </span><span class=p>{</span>
182
- </span><span id=__span-5-28><a id=__codelineno-5-28 name=__codelineno-5-28 href=#__codelineno-5-28></a><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>$&quot;Score: {points}&quot;</span><span class=p>);</span>
183
- </span><span id=__span-5-29><a id=__codelineno-5-29 name=__codelineno-5-29 href=#__codelineno-5-29></a><span class=w> </span><span class=p>}</span>
184
- </span><span id=__span-5-30><a id=__codelineno-5-30 name=__codelineno-5-30 href=#__codelineno-5-30></a><span class=p>}</span>
185
- </span></code></pre></div> <h4 id=what-problems-it-solves_3>What Problems It Solves<a class=headerlink href=#what-problems-it-solves_3 title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ <strong>Simple callbacks:</strong> Straightforward notification pattern</li> <li>✅ <strong>Type safety:</strong> Compile-time checking prevents errors</li> <li>✅ <strong>Return values:</strong> Can get feedback from event handlers</li> <li>✅ <strong>Performance:</strong> Minimal overhead, direct invocation</li> <li>✅ <strong>Familiarity:</strong> Every C# developer knows events</li> <li>✅ <strong>No dependencies:</strong> Built into the language</li> </ul> <h4 id=what-problems-it-doesnt-solve-well_3>What Problems It Doesn't Solve Well<a class=headerlink href=#what-problems-it-doesnt-solve-well_3 title="Anchor link to this section">&para;</a></h4> <ul> <li>❌ <strong>Memory leaks:</strong> Forgetting to unsubscribe causes leaks</li> <li>❌ <strong>Tight coupling:</strong> Subscribers need direct references to event sources</li> <li>❌ <strong>Execution order:</strong> Undefined handler invocation order</li> <li>❌ <strong>Lifecycle management:</strong> Manual subscribe/unsubscribe in OnEnable/OnDisable</li> <li>❌ <strong>Debugging:</strong> No visibility into who's subscribed or when events fire</li> <li>❌ <strong>Validation/interception:</strong> No pipeline to modify or validate before handlers</li> <li>❌ <strong>Global observation:</strong> Cannot listen to all events across the system</li> </ul> <h4 id=performance-characteristics_3>Performance Characteristics<a class=headerlink href=#performance-characteristics_3 title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>Fastest option:</strong> Direct method invocation (~50ns per call)</li> <li><strong>Zero allocation:</strong> No GC pressure for basic events</li> <li><strong>Inline-able:</strong> JIT can optimize simple event calls</li> <li><strong>Use case:</strong> Best raw performance for simple notifications</li> </ul> <h4 id=learning-curve_3>Learning Curve<a class=headerlink href=#learning-curve_3 title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>Zero for C# developers:</strong> Standard language feature</li> <li><strong>Immediate productivity:</strong> No new concepts to learn</li> <li><strong>Estimated learning time:</strong> Already know it</li> </ul> <h4 id=ease-of-understanding_3>Ease of Understanding<a class=headerlink href=#ease-of-understanding_3 title="Anchor link to this section">&para;</a></h4> <ul> <li>⭐⭐⭐⭐⭐ (Very easy)</li> <li>Familiar to all C# developers</li> <li>Straightforward mental model</li> <li>Easy to debug with breakpoints</li> </ul> <h4 id=when-c-events-win>When C# Events Win<a class=headerlink href=#when-c-events-win title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ Small, stable scope (5-10 events max)</li> <li>✅ Need return values or <code>out</code> parameters</li> <li>✅ Writing a library (DxMessaging is Unity-specific)</li> <li>✅ Simple, local communication within a class or module</li> <li>✅ Team is C# experts, Unity beginners</li> <li>✅ Performance is absolutely critical (lowest overhead)</li> <li>✅ Quick prototypes or game jams</li> </ul> <h4 id=when-dxmessaging-wins_3>When DxMessaging Wins<a class=headerlink href=#when-dxmessaging-wins_3 title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ Memory leaks are a problem (automatic lifecycle management)</li> <li>✅ Need decoupling (systems don't reference each other)</li> <li>✅ Execution order matters (priority-based handlers)</li> <li>✅ Debugging "what fired when" (Inspector message history)</li> <li>✅ Message validation/interception needed (interceptor pipeline)</li> <li>✅ Global observation needed (listen to all message instances)</li> <li>✅ Cross-system communication (10+ systems)</li> <li>✅ Long-term maintenance (months/years)</li> <li>✅ GameObject/Component targeting needed</li> <li>✅ Post-processing stage needed (analytics after handlers)</li> </ul> <h4 id=direct-comparison_3>Direct Comparison<a class=headerlink href=#direct-comparison_3 title="Anchor link to this section">&para;</a></h4> <table> <thead> <tr> <th>Aspect</th> <th>C# Events</th> <th>DxMessaging</th> </tr> </thead> <tbody> <tr> <td><strong>Primary Use Case</strong></td> <td>Simple callbacks</td> <td>Pub/sub messaging</td> </tr> <tr> <td><strong>Unity Compatibility</strong></td> <td>✅ Built into C#</td> <td>✅ Built for Unity</td> </tr> <tr> <td><strong>Dependencies</strong></td> <td>✅ None (language)</td> <td>✅ Standalone</td> </tr> <tr> <td><strong>Performance</strong></td> <td>~50ns/call (fastest)</td> <td>~60ns/call</td> </tr> <tr> <td><strong>Allocations</strong></td> <td>✅ Zero (basic)</td> <td>✅ Zero (structs)</td> </tr> <tr> <td><strong>Learning Curve</strong></td> <td>⭐⭐⭐⭐⭐ None</td> <td>⭐⭐⭐ Moderate</td> </tr> <tr> <td><strong>Setup Complexity</strong></td> <td>⭐⭐⭐⭐⭐ Minimal</td> <td>⭐⭐⭐ Moderate</td> </tr> <tr> <td><strong>DI Integration</strong></td> <td>⚠️ Manual</td> <td>⚠️ Optional</td> </tr> <tr> <td><strong>Async/Await</strong></td> <td>⚠️ Manual</td> <td>⚠️ Manual</td> </tr> <tr> <td><strong>Type Safety</strong></td> <td>✅ Strong</td> <td>✅ Strong</td> </tr> <tr> <td><strong>Lifecycle Management</strong></td> <td>❌ Manual unsubscribe</td> <td>✅ Automatic</td> </tr> <tr> <td><strong>Execution Order</strong></td> <td>❌ Undefined</td> <td>✅ Priority-based</td> </tr> <tr> <td><strong>GameObject Targeting</strong></td> <td>❌ Not built-in</td> <td>✅ Built-in</td> </tr> <tr> <td><strong>Unity Integration</strong></td> <td>⭐ None</td> <td>⭐⭐⭐⭐⭐ Deep</td> </tr> <tr> <td><strong>Inspector Debugging</strong></td> <td>❌ No</td> <td>✅ History + stats</td> </tr> <tr> <td><strong>Interceptors</strong></td> <td>❌ Not built-in</td> <td>✅ Full pipeline</td> </tr> <tr> <td><strong>Global Observers</strong></td> <td>❌ Not built-in</td> <td>✅ Listen to all</td> </tr> <tr> <td><strong>Post-Processing</strong></td> <td>❌ Not built-in</td> <td>✅ Dedicated stage</td> </tr> <tr> <td><strong>Testability</strong></td> <td>⭐⭐ Hard to isolate</td> <td>⭐⭐⭐⭐⭐ Local buses</td> </tr> <tr> <td><strong>Decoupling</strong></td> <td>⭐ Tight coupling</td> <td>⭐⭐⭐⭐⭐ Excellent</td> </tr> <tr> <td><strong>Return Values</strong></td> <td>✅ Yes</td> <td>❌ Fire-and-forget</td> </tr> </tbody> </table> <p><strong>Bottom Line:</strong> C# events are the fastest and simplest for basic callbacks. DxMessaging is better for complex, decoupled systems where lifecycle management, debugging, and execution control matter.</p> <hr> <h3 id=unityevents-inspector-wiring>UnityEvents (Inspector Wiring)<a class=headerlink href=#unityevents-inspector-wiring title="Anchor link to this section">&para;</a></h3> <p><strong>What It Is:</strong> Unity's serializable event system that allows wiring callbacks in the Inspector. Designed for designer-friendly event hookups without code.</p> <p><strong>Core Philosophy:</strong> Visual, Inspector-based event connections. Enable non-programmers to wire game logic through the editor.</p> <h4 id=key-features_4>Key Features<a class=headerlink href=#key-features_4 title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>Inspector wiring:</strong> Drag-and-drop connections in Unity Inspector</li> <li><strong>Serializable:</strong> Events saved with scenes and prefabs</li> <li><strong>Designer-friendly:</strong> Non-programmers can wire logic</li> <li><strong>Persistent references:</strong> Connections survive across sessions</li> <li><strong>Dynamic parameters:</strong> Pass values from Inspector to callbacks</li> <li><strong>No code required:</strong> Can wire entire behaviors without scripting</li> </ul> <h4 id=code-example_4>Code Example<a class=headerlink href=#code-example_4 title="Anchor link to this section">&para;</a></h4> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-6-1><a id=__codelineno-6-1 name=__codelineno-6-1 href=#__codelineno-6-1></a><span class=k>using</span><span class=w> </span><span class=nn>UnityEngine</span><span class=p>;</span>
186
- </span><span id=__span-6-2><a id=__codelineno-6-2 name=__codelineno-6-2 href=#__codelineno-6-2></a><span class=k>using</span><span class=w> </span><span class=nn>UnityEngine.Events</span><span class=p>;</span>
187
- </span><span id=__span-6-3><a id=__codelineno-6-3 name=__codelineno-6-3 href=#__codelineno-6-3></a>
188
- </span><span id=__span-6-4><a id=__codelineno-6-4 name=__codelineno-6-4 href=#__codelineno-6-4></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>Button</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
189
- </span><span id=__span-6-5><a id=__codelineno-6-5 name=__codelineno-6-5 href=#__codelineno-6-5></a><span class=p>{</span>
190
- </span><span id=__span-6-6><a id=__codelineno-6-6 name=__codelineno-6-6 href=#__codelineno-6-6></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=n>UnityEvent</span><span class=w> </span><span class=n>onClick</span><span class=p>;</span>
191
- </span><span id=__span-6-7><a id=__codelineno-6-7 name=__codelineno-6-7 href=#__codelineno-6-7></a>
192
- </span><span id=__span-6-8><a id=__codelineno-6-8 name=__codelineno-6-8 href=#__codelineno-6-8></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnMouseDown</span><span class=p>()</span>
193
- </span><span id=__span-6-9><a id=__codelineno-6-9 name=__codelineno-6-9 href=#__codelineno-6-9></a><span class=w> </span><span class=p>{</span>
194
- </span><span id=__span-6-10><a id=__codelineno-6-10 name=__codelineno-6-10 href=#__codelineno-6-10></a><span class=w> </span><span class=n>onClick</span><span class=o>?.</span><span class=n>Invoke</span><span class=p>();</span>
195
- </span><span id=__span-6-11><a id=__codelineno-6-11 name=__codelineno-6-11 href=#__codelineno-6-11></a><span class=w> </span><span class=p>}</span>
196
- </span><span id=__span-6-12><a id=__codelineno-6-12 name=__codelineno-6-12 href=#__codelineno-6-12></a><span class=p>}</span>
197
- </span><span id=__span-6-13><a id=__codelineno-6-13 name=__codelineno-6-13 href=#__codelineno-6-13></a>
198
- </span><span id=__span-6-14><a id=__codelineno-6-14 name=__codelineno-6-14 href=#__codelineno-6-14></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>UI</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
199
- </span><span id=__span-6-15><a id=__codelineno-6-15 name=__codelineno-6-15 href=#__codelineno-6-15></a><span class=p>{</span>
200
- </span><span id=__span-6-16><a id=__codelineno-6-16 name=__codelineno-6-16 href=#__codelineno-6-16></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>ShowMenu</span><span class=p>()</span>
201
- </span><span id=__span-6-17><a id=__codelineno-6-17 name=__codelineno-6-17 href=#__codelineno-6-17></a><span class=w> </span><span class=p>{</span>
202
- </span><span id=__span-6-18><a id=__codelineno-6-18 name=__codelineno-6-18 href=#__codelineno-6-18></a><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Menu shown&quot;</span><span class=p>);</span>
203
- </span><span id=__span-6-19><a id=__codelineno-6-19 name=__codelineno-6-19 href=#__codelineno-6-19></a><span class=w> </span><span class=p>}</span>
204
- </span><span id=__span-6-20><a id=__codelineno-6-20 name=__codelineno-6-20 href=#__codelineno-6-20></a>
205
- </span><span id=__span-6-21><a id=__codelineno-6-21 name=__codelineno-6-21 href=#__codelineno-6-21></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>HideMenu</span><span class=p>()</span>
206
- </span><span id=__span-6-22><a id=__codelineno-6-22 name=__codelineno-6-22 href=#__codelineno-6-22></a><span class=w> </span><span class=p>{</span>
207
- </span><span id=__span-6-23><a id=__codelineno-6-23 name=__codelineno-6-23 href=#__codelineno-6-23></a><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>&quot;Menu hidden&quot;</span><span class=p>);</span>
208
- </span><span id=__span-6-24><a id=__codelineno-6-24 name=__codelineno-6-24 href=#__codelineno-6-24></a><span class=w> </span><span class=p>}</span>
209
- </span><span id=__span-6-25><a id=__codelineno-6-25 name=__codelineno-6-25 href=#__codelineno-6-25></a><span class=p>}</span>
210
- </span><span id=__span-6-26><a id=__codelineno-6-26 name=__codelineno-6-26 href=#__codelineno-6-26></a>
211
- </span><span id=__span-6-27><a id=__codelineno-6-27 name=__codelineno-6-27 href=#__codelineno-6-27></a><span class=c1>// In Inspector: Drag UI component to Button&#39;s onClick event</span>
212
- </span><span id=__span-6-28><a id=__codelineno-6-28 name=__codelineno-6-28 href=#__codelineno-6-28></a><span class=c1>// Select ShowMenu from dropdown</span>
213
- </span><span id=__span-6-29><a id=__codelineno-6-29 name=__codelineno-6-29 href=#__codelineno-6-29></a><span class=c1>// No additional code needed</span>
214
- </span></code></pre></div> <h4 id=what-problems-it-solves_4>What Problems It Solves<a class=headerlink href=#what-problems-it-solves_4 title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ <strong>Visual wiring:</strong> See connections in Inspector</li> <li>✅ <strong>No code required:</strong> Designers can hook up events</li> <li>✅ <strong>Persistence:</strong> Connections saved with scenes/prefabs</li> <li>✅ <strong>Rapid prototyping:</strong> Quick iteration without scripting</li> <li>✅ <strong>Prefab workflows:</strong> Events work across prefab instances</li> </ul> <h4 id=what-problems-it-doesnt-solve-well_4>What Problems It Doesn't Solve Well<a class=headerlink href=#what-problems-it-doesnt-solve-well_4 title="Anchor link to this section">&para;</a></h4> <ul> <li>❌ <strong>Hidden dependencies:</strong> Connections invisible in code, hard to find during refactoring</li> <li>❌ <strong>Brittle at scale:</strong> Renaming methods breaks wiring, no compile-time safety</li> <li>❌ <strong>Execution order:</strong> Undefined call order for multiple subscribers</li> <li>❌ <strong>No validation:</strong> No way to validate or intercept before invocation</li> <li>❌ <strong>Performance:</strong> Slower than C# events due to reflection and boxing</li> <li>❌ <strong>Debugging:</strong> Hard to trace "who called what" at runtime</li> <li>❌ <strong>Merge conflicts:</strong> Inspector changes cause git conflicts</li> <li>❌ <strong>Refactoring challenges:</strong> Renaming/moving methods silently breaks connections</li> </ul> <h4 id=performance-characteristics_4>Performance Characteristics<a class=headerlink href=#performance-characteristics_4 title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>Slow compared to alternatives:</strong> Reflection overhead, boxing for value types</li> <li><strong>Allocations:</strong> Parameters boxed as objects, causes GC pressure</li> <li><strong>Use case:</strong> Acceptable for UI and low-frequency events, avoid for high-frequency gameplay</li> </ul> <h4 id=learning-curve_4>Learning Curve<a class=headerlink href=#learning-curve_4 title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>Very easy:</strong> Point-and-click in Inspector</li> <li><strong>No coding knowledge needed:</strong> Accessible to designers</li> <li><strong>Estimated learning time:</strong> 5-10 minutes</li> </ul> <h4 id=ease-of-understanding_4>Ease of Understanding<a class=headerlink href=#ease-of-understanding_4 title="Anchor link to this section">&para;</a></h4> <ul> <li>⭐⭐⭐⭐ (Easy for wiring, hard for debugging)</li> <li>Simple to connect in Inspector</li> <li>Difficult to understand flow when reading code</li> <li>Hard to track down at scale (where is this method called from?)</li> </ul> <h4 id=when-unityevents-win>When UnityEvents Win<a class=headerlink href=#when-unityevents-win title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ Designers need to wire logic without code</li> <li>✅ Rapid prototyping with prefabs</li> <li>✅ Very simple games (mobile casual, hyper-casual)</li> <li>✅ UI interactions with minimal logic</li> <li>✅ Small projects (&lt;5 scripts)</li> <li>✅ One-off connections that rarely change</li> </ul> <h4 id=when-dxmessaging-wins_4>When DxMessaging Wins<a class=headerlink href=#when-dxmessaging-wins_4 title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ Code-first development (programmers prefer code visibility)</li> <li>✅ Refactoring frequently (compile-time safety)</li> <li>✅ Execution order matters (priority-based handlers)</li> <li>✅ Need validation/interception (interceptor pipeline)</li> <li>✅ Performance-sensitive (zero allocation required)</li> <li>✅ Debugging observability (message history)</li> <li>✅ Cross-system communication (10+ components)</li> <li>✅ Team collaboration (merge-friendly code over Inspector)</li> <li>✅ Long-term maintenance (find usages, refactor safely)</li> </ul> <h4 id=direct-comparison_4>Direct Comparison<a class=headerlink href=#direct-comparison_4 title="Anchor link to this section">&para;</a></h4> <table> <thead> <tr> <th>Aspect</th> <th>UnityEvents</th> <th>DxMessaging</th> </tr> </thead> <tbody> <tr> <td><strong>Primary Use Case</strong></td> <td>Inspector wiring</td> <td>Pub/sub messaging</td> </tr> <tr> <td><strong>Unity Compatibility</strong></td> <td>✅ Built into Unity</td> <td>✅ Built for Unity</td> </tr> <tr> <td><strong>Dependencies</strong></td> <td>✅ None (Unity)</td> <td>✅ Standalone</td> </tr> <tr> <td><strong>Performance</strong></td> <td>Slow (serialization)</td> <td>~60ns/call</td> </tr> <tr> <td><strong>Allocations</strong></td> <td>❌ Boxing</td> <td>✅ Zero (structs)</td> </tr> <tr> <td><strong>Learning Curve</strong></td> <td>⭐⭐⭐⭐⭐ Minimal</td> <td>⭐⭐⭐ Moderate</td> </tr> <tr> <td><strong>Setup Complexity</strong></td> <td>⭐⭐⭐⭐⭐ Inspector</td> <td>⭐⭐⭐ Code-based</td> </tr> <tr> <td><strong>DI Integration</strong></td> <td>❌ No</td> <td>⚠️ Optional</td> </tr> <tr> <td><strong>Async/Await</strong></td> <td>❌ No</td> <td>⚠️ Manual</td> </tr> <tr> <td><strong>Type Safety</strong></td> <td>⭐⭐ Weak (serialized)</td> <td>✅ Strong</td> </tr> <tr> <td><strong>Lifecycle Management</strong></td> <td>⚠️ Unity-managed</td> <td>✅ Automatic</td> </tr> <tr> <td><strong>Execution Order</strong></td> <td>❌ Undefined</td> <td>✅ Priority-based</td> </tr> <tr> <td><strong>GameObject Targeting</strong></td> <td>⚠️ Manual references</td> <td>✅ Built-in</td> </tr> <tr> <td><strong>Unity Integration</strong></td> <td>⭐⭐⭐ Inspector-based</td> <td>⭐⭐⭐⭐⭐ Deep</td> </tr> <tr> <td><strong>Inspector Debugging</strong></td> <td>⭐⭐ Connections only</td> <td>✅ History + stats</td> </tr> <tr> <td><strong>Interceptors</strong></td> <td>❌ Not built-in</td> <td>✅ Full pipeline</td> </tr> <tr> <td><strong>Global Observers</strong></td> <td>❌ Not possible</td> <td>✅ Listen to all</td> </tr> <tr> <td><strong>Post-Processing</strong></td> <td>❌ Not built-in</td> <td>✅ Dedicated stage</td> </tr> <tr> <td><strong>Testability</strong></td> <td>⭐⭐ Scene setup</td> <td>⭐⭐⭐⭐⭐ Local buses</td> </tr> <tr> <td><strong>Decoupling</strong></td> <td>⭐⭐ Hidden refs</td> <td>⭐⭐⭐⭐⭐ Excellent</td> </tr> <tr> <td><strong>Refactoring Safety</strong></td> <td>❌ Silent breakage</td> <td>✅ Compile-time errors</td> </tr> <tr> <td><strong>Code Visibility</strong></td> <td>❌ Hidden in Inspector</td> <td>✅ Explicit in code</td> </tr> </tbody> </table> <p><strong>Bottom Line:</strong> UnityEvents are well-suited for simple Inspector-based wiring and designer workflows. DxMessaging is better for code-first development, refactoring safety, and complex messaging needs.</p> <hr> <h3 id=unity-sendmessage>Unity SendMessage<a class=headerlink href=#unity-sendmessage title="Anchor link to this section">&para;</a></h3> <p><strong>What It Is:</strong> Unity's legacy reflection-based message system. Calls methods by name on GameObjects and their components.</p> <p><strong>Core Philosophy:</strong> String-based, reflection-driven communication. Designed for simplicity and GameObject hierarchy traversal.</p> <h4 id=key-features_5>Key Features<a class=headerlink href=#key-features_5 title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>String-based:</strong> Call methods by name without references</li> <li><strong>Hierarchy traversal:</strong> SendMessageUpwards, BroadcastMessage for parent/child searching</li> <li><strong>No dependencies:</strong> Built into Unity GameObject</li> <li><strong>Simple API:</strong> One-line method calls</li> <li><strong>GameObject-centric:</strong> Works with Unity's component model</li> <li><strong>Optional receivers:</strong> Methods don't need to exist (SendMessageOptions.DontRequireReceiver)</li> </ul> <h4 id=code-example_5>Code Example<a class=headerlink href=#code-example_5 title="Anchor link to this section">&para;</a></h4> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-7-1><a id=__codelineno-7-1 name=__codelineno-7-1 href=#__codelineno-7-1></a><span class=k>using</span><span class=w> </span><span class=nn>UnityEngine</span><span class=p>;</span>
215
- </span><span id=__span-7-2><a id=__codelineno-7-2 name=__codelineno-7-2 href=#__codelineno-7-2></a>
216
- </span><span id=__span-7-3><a id=__codelineno-7-3 name=__codelineno-7-3 href=#__codelineno-7-3></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>Enemy</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
217
- </span><span id=__span-7-4><a id=__codelineno-7-4 name=__codelineno-7-4 href=#__codelineno-7-4></a><span class=p>{</span>
218
- </span><span id=__span-7-5><a id=__codelineno-7-5 name=__codelineno-7-5 href=#__codelineno-7-5></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>TakeDamage</span><span class=p>(</span><span class=kt>int</span><span class=w> </span><span class=n>amount</span><span class=p>)</span>
219
- </span><span id=__span-7-6><a id=__codelineno-7-6 name=__codelineno-7-6 href=#__codelineno-7-6></a><span class=w> </span><span class=p>{</span>
220
- </span><span id=__span-7-7><a id=__codelineno-7-7 name=__codelineno-7-7 href=#__codelineno-7-7></a><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>$&quot;Took {amount} damage&quot;</span><span class=p>);</span>
221
- </span><span id=__span-7-8><a id=__codelineno-7-8 name=__codelineno-7-8 href=#__codelineno-7-8></a><span class=w> </span><span class=p>}</span>
222
- </span><span id=__span-7-9><a id=__codelineno-7-9 name=__codelineno-7-9 href=#__codelineno-7-9></a><span class=p>}</span>
223
- </span><span id=__span-7-10><a id=__codelineno-7-10 name=__codelineno-7-10 href=#__codelineno-7-10></a>
224
- </span><span id=__span-7-11><a id=__codelineno-7-11 name=__codelineno-7-11 href=#__codelineno-7-11></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>Weapon</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
225
- </span><span id=__span-7-12><a id=__codelineno-7-12 name=__codelineno-7-12 href=#__codelineno-7-12></a><span class=p>{</span>
226
- </span><span id=__span-7-13><a id=__codelineno-7-13 name=__codelineno-7-13 href=#__codelineno-7-13></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Attack</span><span class=p>(</span><span class=n>GameObject</span><span class=w> </span><span class=n>target</span><span class=p>)</span>
227
- </span><span id=__span-7-14><a id=__codelineno-7-14 name=__codelineno-7-14 href=#__codelineno-7-14></a><span class=w> </span><span class=p>{</span>
228
- </span><span id=__span-7-15><a id=__codelineno-7-15 name=__codelineno-7-15 href=#__codelineno-7-15></a><span class=w> </span><span class=c1>// Call TakeDamage on target GameObject</span>
229
- </span><span id=__span-7-16><a id=__codelineno-7-16 name=__codelineno-7-16 href=#__codelineno-7-16></a><span class=w> </span><span class=n>target</span><span class=p>.</span><span class=n>SendMessage</span><span class=p>(</span><span class=s>&quot;TakeDamage&quot;</span><span class=p>,</span><span class=w> </span><span class=mi>10</span><span class=p>);</span>
230
- </span><span id=__span-7-17><a id=__codelineno-7-17 name=__codelineno-7-17 href=#__codelineno-7-17></a><span class=w> </span><span class=p>}</span>
231
- </span><span id=__span-7-18><a id=__codelineno-7-18 name=__codelineno-7-18 href=#__codelineno-7-18></a>
232
- </span><span id=__span-7-19><a id=__codelineno-7-19 name=__codelineno-7-19 href=#__codelineno-7-19></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>AttackUpwards</span><span class=p>()</span>
233
- </span><span id=__span-7-20><a id=__codelineno-7-20 name=__codelineno-7-20 href=#__codelineno-7-20></a><span class=w> </span><span class=p>{</span>
234
- </span><span id=__span-7-21><a id=__codelineno-7-21 name=__codelineno-7-21 href=#__codelineno-7-21></a><span class=w> </span><span class=c1>// Call on this GameObject and all parents</span>
235
- </span><span id=__span-7-22><a id=__codelineno-7-22 name=__codelineno-7-22 href=#__codelineno-7-22></a><span class=w> </span><span class=n>SendMessageUpwards</span><span class=p>(</span><span class=s>&quot;TakeDamage&quot;</span><span class=p>,</span><span class=w> </span><span class=mi>5</span><span class=p>,</span><span class=w> </span><span class=n>SendMessageOptions</span><span class=p>.</span><span class=n>DontRequireReceiver</span><span class=p>);</span>
236
- </span><span id=__span-7-23><a id=__codelineno-7-23 name=__codelineno-7-23 href=#__codelineno-7-23></a><span class=w> </span><span class=p>}</span>
237
- </span><span id=__span-7-24><a id=__codelineno-7-24 name=__codelineno-7-24 href=#__codelineno-7-24></a>
238
- </span><span id=__span-7-25><a id=__codelineno-7-25 name=__codelineno-7-25 href=#__codelineno-7-25></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>AttackChildren</span><span class=p>()</span>
239
- </span><span id=__span-7-26><a id=__codelineno-7-26 name=__codelineno-7-26 href=#__codelineno-7-26></a><span class=w> </span><span class=p>{</span>
240
- </span><span id=__span-7-27><a id=__codelineno-7-27 name=__codelineno-7-27 href=#__codelineno-7-27></a><span class=w> </span><span class=c1>// Call on this GameObject and all children</span>
241
- </span><span id=__span-7-28><a id=__codelineno-7-28 name=__codelineno-7-28 href=#__codelineno-7-28></a><span class=w> </span><span class=n>BroadcastMessage</span><span class=p>(</span><span class=s>&quot;TakeDamage&quot;</span><span class=p>,</span><span class=w> </span><span class=mi>3</span><span class=p>);</span>
242
- </span><span id=__span-7-29><a id=__codelineno-7-29 name=__codelineno-7-29 href=#__codelineno-7-29></a><span class=w> </span><span class=p>}</span>
243
- </span><span id=__span-7-30><a id=__codelineno-7-30 name=__codelineno-7-30 href=#__codelineno-7-30></a><span class=p>}</span>
244
- </span></code></pre></div> <h4 id=what-problems-it-solves_5>What Problems It Solves<a class=headerlink href=#what-problems-it-solves_5 title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ <strong>No references needed:</strong> Call methods without GetComponent</li> <li>✅ <strong>Hierarchy traversal:</strong> Easy parent/child communication</li> <li>✅ <strong>Simple API:</strong> One-line method invocation</li> <li>✅ <strong>Optional receivers:</strong> Can call non-existent methods safely</li> <li>✅ <strong>Built-in:</strong> No setup or dependencies</li> </ul> <h4 id=what-problems-it-doesnt-solve-well_5>What Problems It Doesn't Solve Well<a class=headerlink href=#what-problems-it-doesnt-solve-well_5 title="Anchor link to this section">&para;</a></h4> <ul> <li>❌ <strong>No type safety:</strong> String-based, typos cause silent failures</li> <li>❌ <strong>Slow performance:</strong> Reflection overhead on every call</li> <li>❌ <strong>Limited parameters:</strong> Only 0 or 1 parameter supported</li> <li>❌ <strong>Boxing allocations:</strong> Value types boxed to object, causes GC</li> <li>❌ <strong>Hard to debug:</strong> No compile-time checking, no IDE "Find Usages"</li> <li>❌ <strong>Refactoring difficulty:</strong> Renaming methods breaks string references</li> <li>❌ <strong>No validation:</strong> No way to validate or intercept messages</li> <li>❌ <strong>Execution order:</strong> Undefined call order for multiple receivers</li> </ul> <h4 id=performance-characteristics_5>Performance Characteristics<a class=headerlink href=#performance-characteristics_5 title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>Very slow:</strong> Reflection overhead much worse than events or messaging systems</li> <li><strong>Allocations:</strong> Boxing value type parameters causes GC pressure</li> <li><strong>Use case:</strong> Legacy code only; avoid for new development</li> </ul> <h4 id=learning-curve_5>Learning Curve<a class=headerlink href=#learning-curve_5 title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>Very easy:</strong> Simple one-line API</li> <li><strong>Immediate productivity:</strong> No setup required</li> <li><strong>Estimated learning time:</strong> 5 minutes</li> </ul> <h4 id=ease-of-understanding_5>Ease of Understanding<a class=headerlink href=#ease-of-understanding_5 title="Anchor link to this section">&para;</a></h4> <ul> <li>⭐⭐⭐ (Simple to use, hard to maintain)</li> <li>Easy to write initially</li> <li>Difficult to track method calls (no Find Usages)</li> <li>Refactoring breaks string references silently</li> </ul> <h4 id=when-unity-sendmessage-wins>When Unity SendMessage Wins<a class=headerlink href=#when-unity-sendmessage-wins title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ Legacy code that already uses it</li> <li>✅ Quick prototypes (throwaway code)</li> <li>✅ Simple tutorials or learning examples</li> <li>✅ Calling optional methods that may not exist</li> <li>✅ GameObject hierarchies with optional components (DontRequireReceiver pattern)</li> </ul> <h4 id=when-dxmessaging-wins_5>When DxMessaging Wins<a class=headerlink href=#when-dxmessaging-wins_5 title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ Type safety required (compile-time checking)</li> <li>✅ Performance matters (zero allocation, no reflection)</li> <li>✅ Multiple parameters needed (struct fields)</li> <li>✅ Refactoring frequently (find usages, rename safely)</li> <li>✅ Debugging observability (message history)</li> <li>✅ Execution order control (priority-based handlers)</li> <li>✅ Message validation/interception (interceptor pipeline)</li> <li>✅ Production code (maintainability over simplicity)</li> <li>✅ Modern projects (avoid legacy patterns)</li> </ul> <h4 id=direct-comparison_5>Direct Comparison<a class=headerlink href=#direct-comparison_5 title="Anchor link to this section">&para;</a></h4> <table> <thead> <tr> <th>Aspect</th> <th>Unity SendMessage</th> <th>DxMessaging</th> </tr> </thead> <tbody> <tr> <td><strong>Primary Use Case</strong></td> <td>Legacy GameObject calls</td> <td>Pub/sub messaging</td> </tr> <tr> <td><strong>Unity Compatibility</strong></td> <td>✅ Built into Unity</td> <td>✅ Built for Unity</td> </tr> <tr> <td><strong>Dependencies</strong></td> <td>✅ None (Unity)</td> <td>✅ Standalone</td> </tr> <tr> <td><strong>Performance</strong></td> <td>Very slow (reflection)</td> <td>~60ns/call</td> </tr> <tr> <td><strong>Allocations</strong></td> <td>❌ Heavy boxing</td> <td>✅ Zero (structs)</td> </tr> <tr> <td><strong>Learning Curve</strong></td> <td>⭐⭐⭐⭐⭐ Minimal</td> <td>⭐⭐⭐ Moderate</td> </tr> <tr> <td><strong>Setup Complexity</strong></td> <td>⭐⭐⭐⭐⭐ None</td> <td>⭐⭐⭐ Moderate</td> </tr> <tr> <td><strong>DI Integration</strong></td> <td>❌ No</td> <td>⚠️ Optional</td> </tr> <tr> <td><strong>Async/Await</strong></td> <td>❌ No</td> <td>⚠️ Manual</td> </tr> <tr> <td><strong>Type Safety</strong></td> <td>❌ String-based</td> <td>✅ Strong</td> </tr> <tr> <td><strong>Lifecycle Management</strong></td> <td>❌ None</td> <td>✅ Automatic</td> </tr> <tr> <td><strong>Execution Order</strong></td> <td>❌ Undefined</td> <td>✅ Priority-based</td> </tr> <tr> <td><strong>GameObject Targeting</strong></td> <td>✅ Hierarchy traversal</td> <td>✅ Built-in (ID-based)</td> </tr> <tr> <td><strong>Unity Integration</strong></td> <td>⭐⭐ Legacy API</td> <td>⭐⭐⭐⭐⭐ Deep</td> </tr> <tr> <td><strong>Inspector Debugging</strong></td> <td>❌ No</td> <td>✅ History + stats</td> </tr> <tr> <td><strong>Interceptors</strong></td> <td>❌ Not built-in</td> <td>✅ Full pipeline</td> </tr> <tr> <td><strong>Global Observers</strong></td> <td>❌ Not possible</td> <td>✅ Listen to all</td> </tr> <tr> <td><strong>Post-Processing</strong></td> <td>❌ Not built-in</td> <td>✅ Dedicated stage</td> </tr> <tr> <td><strong>Testability</strong></td> <td>⭐⭐ Requires GameObjects</td> <td>⭐⭐⭐⭐⭐ Local buses</td> </tr> <tr> <td><strong>Decoupling</strong></td> <td>⭐⭐ String-based</td> <td>⭐⭐⭐⭐⭐ Excellent</td> </tr> <tr> <td><strong>Refactoring Safety</strong></td> <td>❌ Silent breakage</td> <td>✅ Compile-time errors</td> </tr> <tr> <td><strong>Parameters</strong></td> <td>⚠️ 0 or 1 only</td> <td>✅ Unlimited (struct fields)</td> </tr> </tbody> </table> <p><strong>Bottom Line:</strong> SendMessage is legacy Unity API. Use only for maintaining old code. DxMessaging provides all the same capabilities with type safety, performance, and modern tooling.</p> <p><strong>Migration Path:</strong> DxMessaging provides <code>ReflexiveMessage</code> to bridge legacy SendMessage behavior:</p> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-8-1><a id=__codelineno-8-1 name=__codelineno-8-1 href=#__codelineno-8-1></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core</span><span class=p>;</span>
245
- </span><span id=__span-8-2><a id=__codelineno-8-2 name=__codelineno-8-2 href=#__codelineno-8-2></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.Messages</span><span class=p>;</span>
246
- </span><span id=__span-8-3><a id=__codelineno-8-3 name=__codelineno-8-3 href=#__codelineno-8-3></a>
247
- </span><span id=__span-8-4><a id=__codelineno-8-4 name=__codelineno-8-4 href=#__codelineno-8-4></a><span class=c1>// Legacy SendMessage equivalent</span>
248
- </span><span id=__span-8-5><a id=__codelineno-8-5 name=__codelineno-8-5 href=#__codelineno-8-5></a><span class=n>InstanceId</span><span class=w> </span><span class=n>target</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>gameObject</span><span class=p>;</span>
249
- </span><span id=__span-8-6><a id=__codelineno-8-6 name=__codelineno-8-6 href=#__codelineno-8-6></a><span class=kt>var</span><span class=w> </span><span class=n>msg</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>ReflexiveMessage</span><span class=p>(</span><span class=s>&quot;OnHit&quot;</span><span class=p>,</span><span class=w> </span><span class=n>ReflexiveSendMode</span><span class=p>.</span><span class=n>Upwards</span><span class=p>,</span><span class=w> </span><span class=mi>10</span><span class=p>);</span>
250
- </span><span id=__span-8-7><a id=__codelineno-8-7 name=__codelineno-8-7 href=#__codelineno-8-7></a><span class=n>MessageHandler</span><span class=p>.</span><span class=n>MessageBus</span><span class=p>.</span><span class=n>TargetedBroadcast</span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>target</span><span class=p>,</span><span class=w> </span><span class=k>ref</span><span class=w> </span><span class=n>msg</span><span class=p>);</span>
251
- </span><span id=__span-8-8><a id=__codelineno-8-8 name=__codelineno-8-8 href=#__codelineno-8-8></a>
252
- </span><span id=__span-8-9><a id=__codelineno-8-9 name=__codelineno-8-9 href=#__codelineno-8-9></a><span class=c1>// Prefer typed messages for new code:</span>
253
- </span><span id=__span-8-10><a id=__codelineno-8-10 name=__codelineno-8-10 href=#__codelineno-8-10></a><span class=c1>// - Multiple parameters via struct fields</span>
254
- </span><span id=__span-8-11><a id=__codelineno-8-11 name=__codelineno-8-11 href=#__codelineno-8-11></a><span class=c1>// - By-ref handlers avoid boxing</span>
255
- </span><span id=__span-8-12><a id=__codelineno-8-12 name=__codelineno-8-12 href=#__codelineno-8-12></a><span class=c1>// - Compile-time safety</span>
256
- </span></code></pre></div> <hr> <h3 id=global-event-bus-singletons>Global Event Bus Singletons<a class=headerlink href=#global-event-bus-singletons title="Anchor link to this section">&para;</a></h3> <p><strong>What It Is:</strong> A static/singleton class that centralizes all events in one global location. Common pattern for decoupling without dependency injection.</p> <p><strong>Core Philosophy:</strong> Central event hub accessible from anywhere. Simplify communication through a single global entry point.</p> <h4 id=key-features_6>Key Features<a class=headerlink href=#key-features_6 title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>Global access:</strong> Static class available everywhere</li> <li><strong>No references needed:</strong> No GetComponent or serialized fields</li> <li><strong>Simple pattern:</strong> Easy to understand and implement</li> <li><strong>Decoupling:</strong> Publishers and subscribers don't know about each other</li> <li><strong>Flexibility:</strong> Can add events without changing existing code</li> </ul> <h4 id=code-example_6>Code Example<a class=headerlink href=#code-example_6 title="Anchor link to this section">&para;</a></h4> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-9-1><a id=__codelineno-9-1 name=__codelineno-9-1 href=#__codelineno-9-1></a><span class=k>using</span><span class=w> </span><span class=nn>System</span><span class=p>;</span>
257
- </span><span id=__span-9-2><a id=__codelineno-9-2 name=__codelineno-9-2 href=#__codelineno-9-2></a><span class=k>using</span><span class=w> </span><span class=nn>UnityEngine</span><span class=p>;</span>
258
- </span><span id=__span-9-3><a id=__codelineno-9-3 name=__codelineno-9-3 href=#__codelineno-9-3></a>
259
- </span><span id=__span-9-4><a id=__codelineno-9-4 name=__codelineno-9-4 href=#__codelineno-9-4></a><span class=k>public</span><span class=w> </span><span class=k>static</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>EventHub</span>
260
- </span><span id=__span-9-5><a id=__codelineno-9-5 name=__codelineno-9-5 href=#__codelineno-9-5></a><span class=p>{</span>
261
- </span><span id=__span-9-6><a id=__codelineno-9-6 name=__codelineno-9-6 href=#__codelineno-9-6></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>static</span><span class=w> </span><span class=k>event</span><span class=w> </span><span class=n>Action</span><span class=o>&lt;</span><span class=kt>int</span><span class=o>&gt;</span><span class=w> </span><span class=n>OnDamage</span><span class=p>;</span>
262
- </span><span id=__span-9-7><a id=__codelineno-9-7 name=__codelineno-9-7 href=#__codelineno-9-7></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>static</span><span class=w> </span><span class=k>event</span><span class=w> </span><span class=n>Action</span><span class=o>&lt;</span><span class=kt>string</span><span class=o>&gt;</span><span class=w> </span><span class=n>OnEnemyKilled</span><span class=p>;</span>
263
- </span><span id=__span-9-8><a id=__codelineno-9-8 name=__codelineno-9-8 href=#__codelineno-9-8></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>static</span><span class=w> </span><span class=k>event</span><span class=w> </span><span class=n>Action</span><span class=w> </span><span class=n>OnGameOver</span><span class=p>;</span>
264
- </span><span id=__span-9-9><a id=__codelineno-9-9 name=__codelineno-9-9 href=#__codelineno-9-9></a>
265
- </span><span id=__span-9-10><a id=__codelineno-9-10 name=__codelineno-9-10 href=#__codelineno-9-10></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>static</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RaiseDamage</span><span class=p>(</span><span class=kt>int</span><span class=w> </span><span class=n>amount</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>OnDamage</span><span class=o>?.</span><span class=n>Invoke</span><span class=p>(</span><span class=n>amount</span><span class=p>);</span>
266
- </span><span id=__span-9-11><a id=__codelineno-9-11 name=__codelineno-9-11 href=#__codelineno-9-11></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>static</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RaiseEnemyKilled</span><span class=p>(</span><span class=kt>string</span><span class=w> </span><span class=n>enemyType</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>OnEnemyKilled</span><span class=o>?.</span><span class=n>Invoke</span><span class=p>(</span><span class=n>enemyType</span><span class=p>);</span>
267
- </span><span id=__span-9-12><a id=__codelineno-9-12 name=__codelineno-9-12 href=#__codelineno-9-12></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>static</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RaiseGameOver</span><span class=p>()</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>OnGameOver</span><span class=o>?.</span><span class=n>Invoke</span><span class=p>();</span>
268
- </span><span id=__span-9-13><a id=__codelineno-9-13 name=__codelineno-9-13 href=#__codelineno-9-13></a><span class=p>}</span>
269
- </span><span id=__span-9-14><a id=__codelineno-9-14 name=__codelineno-9-14 href=#__codelineno-9-14></a>
270
- </span><span id=__span-9-15><a id=__codelineno-9-15 name=__codelineno-9-15 href=#__codelineno-9-15></a><span class=c1>// Producer</span>
271
- </span><span id=__span-9-16><a id=__codelineno-9-16 name=__codelineno-9-16 href=#__codelineno-9-16></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>Enemy</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
272
- </span><span id=__span-9-17><a id=__codelineno-9-17 name=__codelineno-9-17 href=#__codelineno-9-17></a><span class=p>{</span>
273
- </span><span id=__span-9-18><a id=__codelineno-9-18 name=__codelineno-9-18 href=#__codelineno-9-18></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Die</span><span class=p>()</span>
274
- </span><span id=__span-9-19><a id=__codelineno-9-19 name=__codelineno-9-19 href=#__codelineno-9-19></a><span class=w> </span><span class=p>{</span>
275
- </span><span id=__span-9-20><a id=__codelineno-9-20 name=__codelineno-9-20 href=#__codelineno-9-20></a><span class=w> </span><span class=n>EventHub</span><span class=p>.</span><span class=n>RaiseEnemyKilled</span><span class=p>(</span><span class=s>&quot;Orc&quot;</span><span class=p>);</span>
276
- </span><span id=__span-9-21><a id=__codelineno-9-21 name=__codelineno-9-21 href=#__codelineno-9-21></a><span class=w> </span><span class=p>}</span>
277
- </span><span id=__span-9-22><a id=__codelineno-9-22 name=__codelineno-9-22 href=#__codelineno-9-22></a><span class=p>}</span>
278
- </span><span id=__span-9-23><a id=__codelineno-9-23 name=__codelineno-9-23 href=#__codelineno-9-23></a>
279
- </span><span id=__span-9-24><a id=__codelineno-9-24 name=__codelineno-9-24 href=#__codelineno-9-24></a><span class=c1>// Consumer</span>
280
- </span><span id=__span-9-25><a id=__codelineno-9-25 name=__codelineno-9-25 href=#__codelineno-9-25></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>UI</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
281
- </span><span id=__span-9-26><a id=__codelineno-9-26 name=__codelineno-9-26 href=#__codelineno-9-26></a><span class=p>{</span>
282
- </span><span id=__span-9-27><a id=__codelineno-9-27 name=__codelineno-9-27 href=#__codelineno-9-27></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnEnable</span><span class=p>()</span>
283
- </span><span id=__span-9-28><a id=__codelineno-9-28 name=__codelineno-9-28 href=#__codelineno-9-28></a><span class=w> </span><span class=p>{</span>
284
- </span><span id=__span-9-29><a id=__codelineno-9-29 name=__codelineno-9-29 href=#__codelineno-9-29></a><span class=w> </span><span class=n>EventHub</span><span class=p>.</span><span class=n>OnEnemyKilled</span><span class=w> </span><span class=o>+=</span><span class=w> </span><span class=n>HandleEnemyKilled</span><span class=p>;</span>
285
- </span><span id=__span-9-30><a id=__codelineno-9-30 name=__codelineno-9-30 href=#__codelineno-9-30></a><span class=w> </span><span class=p>}</span>
286
- </span><span id=__span-9-31><a id=__codelineno-9-31 name=__codelineno-9-31 href=#__codelineno-9-31></a>
287
- </span><span id=__span-9-32><a id=__codelineno-9-32 name=__codelineno-9-32 href=#__codelineno-9-32></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnDisable</span><span class=p>()</span>
288
- </span><span id=__span-9-33><a id=__codelineno-9-33 name=__codelineno-9-33 href=#__codelineno-9-33></a><span class=w> </span><span class=p>{</span>
289
- </span><span id=__span-9-34><a id=__codelineno-9-34 name=__codelineno-9-34 href=#__codelineno-9-34></a><span class=w> </span><span class=n>EventHub</span><span class=p>.</span><span class=n>OnEnemyKilled</span><span class=w> </span><span class=o>-=</span><span class=w> </span><span class=n>HandleEnemyKilled</span><span class=p>;</span>
290
- </span><span id=__span-9-35><a id=__codelineno-9-35 name=__codelineno-9-35 href=#__codelineno-9-35></a><span class=w> </span><span class=p>}</span>
291
- </span><span id=__span-9-36><a id=__codelineno-9-36 name=__codelineno-9-36 href=#__codelineno-9-36></a>
292
- </span><span id=__span-9-37><a id=__codelineno-9-37 name=__codelineno-9-37 href=#__codelineno-9-37></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>HandleEnemyKilled</span><span class=p>(</span><span class=kt>string</span><span class=w> </span><span class=n>enemyType</span><span class=p>)</span>
293
- </span><span id=__span-9-38><a id=__codelineno-9-38 name=__codelineno-9-38 href=#__codelineno-9-38></a><span class=w> </span><span class=p>{</span>
294
- </span><span id=__span-9-39><a id=__codelineno-9-39 name=__codelineno-9-39 href=#__codelineno-9-39></a><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>$&quot;Enemy killed: {enemyType}&quot;</span><span class=p>);</span>
295
- </span><span id=__span-9-40><a id=__codelineno-9-40 name=__codelineno-9-40 href=#__codelineno-9-40></a><span class=w> </span><span class=p>}</span>
296
- </span><span id=__span-9-41><a id=__codelineno-9-41 name=__codelineno-9-41 href=#__codelineno-9-41></a><span class=p>}</span>
297
- </span></code></pre></div> <h4 id=what-problems-it-solves_6>What Problems It Solves<a class=headerlink href=#what-problems-it-solves_6 title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ <strong>Global decoupling:</strong> No direct references between systems</li> <li>✅ <strong>Easy to add events:</strong> Just add to static class</li> <li>✅ <strong>Simple pattern:</strong> Straightforward to implement and understand</li> <li>✅ <strong>No setup:</strong> No DI container or framework needed</li> </ul> <h4 id=what-problems-it-doesnt-solve-well_6>What Problems It Doesn't Solve Well<a class=headerlink href=#what-problems-it-doesnt-solve-well_6 title="Anchor link to this section">&para;</a></h4> <ul> <li>❌ <strong>Memory leaks:</strong> Still manual subscribe/unsubscribe (same as C# events)</li> <li>❌ <strong>Global state:</strong> Everything in one bag, hard to organize at scale</li> <li>❌ <strong>Execution order:</strong> Undefined handler invocation order</li> <li>❌ <strong>Testing difficulty:</strong> Global state makes unit testing hard</li> <li>❌ <strong>Naming conflicts:</strong> All events in same namespace, naming gets messy</li> <li>❌ <strong>No validation:</strong> No way to intercept or validate messages</li> <li>❌ <strong>No observability:</strong> Can't see who's subscribed or message history</li> <li>❌ <strong>Ownership unclear:</strong> Who manages what events?</li> <li>❌ <strong>Lifecycle management:</strong> Manual subscribe/unsubscribe required</li> </ul> <h4 id=performance-characteristics_6>Performance Characteristics<a class=headerlink href=#performance-characteristics_6 title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>Good performance:</strong> Similar to C# events (static overhead is minimal)</li> <li><strong>Zero allocation:</strong> No GC pressure for basic events</li> <li><strong>Use case:</strong> Acceptable for most scenarios</li> </ul> <h4 id=learning-curve_6>Learning Curve<a class=headerlink href=#learning-curve_6 title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>Very easy:</strong> Just a static class with events</li> <li><strong>Immediate productivity:</strong> No new concepts</li> <li><strong>Estimated learning time:</strong> 10 minutes</li> </ul> <h4 id=ease-of-understanding_6>Ease of Understanding<a class=headerlink href=#ease-of-understanding_6 title="Anchor link to this section">&para;</a></h4> <ul> <li>⭐⭐⭐⭐ (Easy initially, hard at scale)</li> <li>Simple pattern to grasp</li> <li>Becomes messy with 20+ events</li> <li>Hard to track ownership and responsibilities</li> </ul> <h4 id=when-static-event-bus-wins>When Static Event Bus Wins<a class=headerlink href=#when-static-event-bus-wins title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ You've already built one and it works</li> <li>✅ Very simple use cases (just need globals)</li> <li>✅ Small projects (&lt;10 events)</li> <li>✅ No framework dependencies desired</li> <li>✅ Quick prototypes</li> </ul> <h4 id=when-dxmessaging-wins_6>When DxMessaging Wins<a class=headerlink href=#when-dxmessaging-wins_6 title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ More than 10-15 events (organization becomes important)</li> <li>✅ Memory leaks are a concern (automatic lifecycle management)</li> <li>✅ Execution order matters (priority-based handlers)</li> <li>✅ Need message validation/interception (interceptor pipeline)</li> <li>✅ Testing is important (local buses for isolation)</li> <li>✅ Observability needed (Inspector debugging, message history)</li> <li>✅ Multiple subsystems (namespacing and organization)</li> <li>✅ GameObject/Component targeting needed</li> <li>✅ Global observation needed (listen to all message instances)</li> <li>✅ Post-processing needed (analytics after handlers)</li> <li>✅ Long-term maintenance (structure prevents chaos)</li> </ul> <h4 id=direct-comparison_6>Direct Comparison<a class=headerlink href=#direct-comparison_6 title="Anchor link to this section">&para;</a></h4> <table> <thead> <tr> <th>Aspect</th> <th>Static Event Bus</th> <th>DxMessaging</th> </tr> </thead> <tbody> <tr> <td><strong>Primary Use Case</strong></td> <td>Global event hub</td> <td>Pub/sub messaging</td> </tr> <tr> <td><strong>Unity Compatibility</strong></td> <td>✅ Works in Unity</td> <td>✅ Built for Unity</td> </tr> <tr> <td><strong>Dependencies</strong></td> <td>✅ None (custom)</td> <td>✅ Standalone</td> </tr> <tr> <td><strong>Performance</strong></td> <td>~50ns/call (fast)</td> <td>~60ns/call</td> </tr> <tr> <td><strong>Allocations</strong></td> <td>✅ Zero (basic)</td> <td>✅ Zero (structs)</td> </tr> <tr> <td><strong>Learning Curve</strong></td> <td>⭐⭐⭐⭐⭐ Minimal</td> <td>⭐⭐⭐ Moderate</td> </tr> <tr> <td><strong>Setup Complexity</strong></td> <td>⭐⭐⭐⭐⭐ Minimal</td> <td>⭐⭐⭐ Moderate</td> </tr> <tr> <td><strong>DI Integration</strong></td> <td>⚠️ Manual</td> <td>⚠️ Optional</td> </tr> <tr> <td><strong>Async/Await</strong></td> <td>⚠️ Manual</td> <td>⚠️ Manual</td> </tr> <tr> <td><strong>Type Safety</strong></td> <td>✅ Strong</td> <td>✅ Strong</td> </tr> <tr> <td><strong>Lifecycle Management</strong></td> <td>❌ Manual unsubscribe</td> <td>✅ Automatic</td> </tr> <tr> <td><strong>Execution Order</strong></td> <td>❌ Undefined</td> <td>✅ Priority-based</td> </tr> <tr> <td><strong>GameObject Targeting</strong></td> <td>❌ Not built-in</td> <td>✅ Built-in</td> </tr> <tr> <td><strong>Unity Integration</strong></td> <td>⭐ None</td> <td>⭐⭐⭐⭐⭐ Deep</td> </tr> <tr> <td><strong>Inspector Debugging</strong></td> <td>❌ No</td> <td>✅ History + stats</td> </tr> <tr> <td><strong>Interceptors</strong></td> <td>❌ Not built-in</td> <td>✅ Full pipeline</td> </tr> <tr> <td><strong>Global Observers</strong></td> <td>❌ Not built-in</td> <td>✅ Listen to all</td> </tr> <tr> <td><strong>Post-Processing</strong></td> <td>❌ Not built-in</td> <td>✅ Dedicated stage</td> </tr> <tr> <td><strong>Testability</strong></td> <td>⭐ Hard (global)</td> <td>⭐⭐⭐⭐⭐ Local buses</td> </tr> <tr> <td><strong>Decoupling</strong></td> <td>⭐⭐⭐⭐ Good</td> <td>⭐⭐⭐⭐⭐ Excellent</td> </tr> <tr> <td><strong>Organization</strong></td> <td>⭐⭐ One big class</td> <td>⭐⭐⭐⭐⭐ Structured</td> </tr> </tbody> </table> <p><strong>Bottom Line:</strong> Static event buses solve global access but inherit all the problems of C# events (leaks, undefined order, no observability). DxMessaging provides the same global access with lifecycle safety, structure, and debugging tools.</p> <p><strong>Migration Path:</strong> DxMessaging can replace static event buses gradually:</p> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-10-1><a id=__codelineno-10-1 name=__codelineno-10-1 href=#__codelineno-10-1></a><span class=c1>// Old static event bus</span>
298
- </span><span id=__span-10-2><a id=__codelineno-10-2 name=__codelineno-10-2 href=#__codelineno-10-2></a><span class=n>EventHub</span><span class=p>.</span><span class=n>RaiseDamage</span><span class=p>(</span><span class=mi>5</span><span class=p>);</span>
299
- </span><span id=__span-10-3><a id=__codelineno-10-3 name=__codelineno-10-3 href=#__codelineno-10-3></a>
300
- </span><span id=__span-10-4><a id=__codelineno-10-4 name=__codelineno-10-4 href=#__codelineno-10-4></a><span class=c1>// DxMessaging equivalent (global bus)</span>
301
- </span><span id=__span-10-5><a id=__codelineno-10-5 name=__codelineno-10-5 href=#__codelineno-10-5></a><span class=kt>var</span><span class=w> </span><span class=n>damage</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>TookDamage</span><span class=p>(</span><span class=mi>5</span><span class=p>);</span>
302
- </span><span id=__span-10-6><a id=__codelineno-10-6 name=__codelineno-10-6 href=#__codelineno-10-6></a><span class=n>damage</span><span class=p>.</span><span class=n>Emit</span><span class=p>();</span>
303
- </span><span id=__span-10-7><a id=__codelineno-10-7 name=__codelineno-10-7 href=#__codelineno-10-7></a>
304
- </span><span id=__span-10-8><a id=__codelineno-10-8 name=__codelineno-10-8 href=#__codelineno-10-8></a><span class=c1>// Or use local buses for subsystems</span>
305
- </span><span id=__span-10-9><a id=__codelineno-10-9 name=__codelineno-10-9 href=#__codelineno-10-9></a><span class=kt>var</span><span class=w> </span><span class=n>combatBus</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>MessageBus</span><span class=p>();</span>
306
- </span><span id=__span-10-10><a id=__codelineno-10-10 name=__codelineno-10-10 href=#__codelineno-10-10></a><span class=kt>var</span><span class=w> </span><span class=n>combatDamage</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>TookDamage</span><span class=p>(</span><span class=mi>5</span><span class=p>);</span>
307
- </span><span id=__span-10-11><a id=__codelineno-10-11 name=__codelineno-10-11 href=#__codelineno-10-11></a><span class=n>combatDamage</span><span class=p>.</span><span class=n>Emit</span><span class=p>(</span><span class=n>combatBus</span><span class=p>);</span>
308
- </span></code></pre></div> <hr> <h2 id=honest-trade-offs-what-you-give-up-what-you-gain>Honest Trade-offs: What You Give Up, What You Gain<a class=headerlink href=#honest-trade-offs-what-you-give-up-what-you-gain title="Anchor link to this section">&para;</a></h2> <p>DxMessaging involves trade-offs like any architectural choice. This section describes what you gain and what you sacrifice when adopting it.</p> <p><strong>Bottom line first:</strong> For game jam prototypes, C# events are faster to write. For projects you'll maintain for months, DxMessaging becomes more valuable as project complexity increases.</p> <h3 id=learning-curve_7>Learning Curve<a class=headerlink href=#learning-curve_7 title="Anchor link to this section">&para;</a></h3> <h4 id=what-you-give-up>What You Give Up<a class=headerlink href=#what-you-give-up title="Anchor link to this section">&para;</a></h4> <ul> <li>❌ <strong>Immediate productivity</strong> - ~1-2 days to feel comfortable (reading docs, trying examples)</li> <li>❌ <strong>Familiarity</strong> - Your team knows C# events already; DxMessaging is new</li> <li>❌ <strong>"Just works" intuition</strong> - You need to think: "Which message type? What priority?"</li> </ul> <p>Your first message will take 15 minutes. By the 10<sup>th</sup> message, you'll be faster than with events.</p> <h4 id=what-you-gain>What You Gain<a class=headerlink href=#what-you-gain title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ <strong>Long-term velocity</strong> - Adding new features doesn't require touching 5 existing systems</li> <li>✅ <strong>Debugging is faster</strong> - Inspector shows "what fired when" instantly</li> <li>✅ <strong>Onboarding is easier</strong> - New devs see explicit message contracts, not hidden event chains</li> </ul> <p><strong>Example:</strong> Junior dev asks "How does damage work?"</p> <ul> <li><strong>C# events:</strong> "Uh, Player has an OnDamaged event, and HealthBar subscribes in line 47, and..."</li> <li><strong>DxMessaging:</strong> "Search for <code>TookDamage</code> message, see who emits it and who listens."</li> </ul> <h5 id=verdict>Verdict<a class=headerlink href=#verdict title="Anchor link to this section">&para;</a></h5> <ul> <li>Game jam (1 week project): Learning curve not worth it → Stick with C# events</li> <li>Mid-size game (1+ month): Pays off by week 2</li> <li>Large game (6+ months): Highly beneficial</li> </ul> <h3 id=boilerplate>Boilerplate<a class=headerlink href=#boilerplate title="Anchor link to this section">&para;</a></h3> <h4 id=what-you-give-up_1>What You Give Up<a class=headerlink href=#what-you-give-up_1 title="Anchor link to this section">&para;</a></h4> <ul> <li>❌ "One-liners" - C# events can be <code>public event Action OnClick;</code> done</li> <li>❌ Quick and dirty - Need to define message struct, attributes, handler registration</li> </ul> <h4 id=what-you-gain_1>What You Gain<a class=headerlink href=#what-you-gain_1 title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ Explicit contracts - Messages are discoverable types, not hidden delegates</li> <li>✅ Auto-generated code - <code>[DxAutoConstructor]</code> reduces boilerplate</li> <li>✅ Compile-time safety - Refactors update all usages</li> </ul> <h4 id=example-comparison>Example Comparison<a class=headerlink href=#example-comparison title="Anchor link to this section">&para;</a></h4> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-11-1><a id=__codelineno-11-1 name=__codelineno-11-1 href=#__codelineno-11-1></a><span class=c1>// C# Event (minimal boilerplate)</span>
309
- </span><span id=__span-11-2><a id=__codelineno-11-2 name=__codelineno-11-2 href=#__codelineno-11-2></a><span class=k>public</span><span class=w> </span><span class=k>event</span><span class=w> </span><span class=n>Action</span><span class=o>&lt;</span><span class=kt>int</span><span class=o>&gt;</span><span class=w> </span><span class=n>OnDamage</span><span class=p>;</span>
310
- </span><span id=__span-11-3><a id=__codelineno-11-3 name=__codelineno-11-3 href=#__codelineno-11-3></a><span class=n>OnDamage</span><span class=o>?.</span><span class=n>Invoke</span><span class=p>(</span><span class=mi>5</span><span class=p>);</span>
311
- </span><span id=__span-11-4><a id=__codelineno-11-4 name=__codelineno-11-4 href=#__codelineno-11-4></a>
312
- </span><span id=__span-11-5><a id=__codelineno-11-5 name=__codelineno-11-5 href=#__codelineno-11-5></a><span class=c1>// DxMessaging (more upfront definition)</span>
313
- </span><span id=__span-11-6><a id=__codelineno-11-6 name=__codelineno-11-6 href=#__codelineno-11-6></a><span class=na>[DxBroadcastMessage]</span>
314
- </span><span id=__span-11-7><a id=__codelineno-11-7 name=__codelineno-11-7 href=#__codelineno-11-7></a><span class=na>[DxAutoConstructor]</span>
315
- </span><span id=__span-11-8><a id=__codelineno-11-8 name=__codelineno-11-8 href=#__codelineno-11-8></a><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=k>partial</span><span class=w> </span><span class=k>struct</span><span class=w> </span><span class=nc>TookDamage</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>amount</span><span class=p>;</span><span class=w> </span><span class=p>}</span>
316
- </span><span id=__span-11-9><a id=__codelineno-11-9 name=__codelineno-11-9 href=#__codelineno-11-9></a>
317
- </span><span id=__span-11-10><a id=__codelineno-11-10 name=__codelineno-11-10 href=#__codelineno-11-10></a><span class=kt>var</span><span class=w> </span><span class=n>msg</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>TookDamage</span><span class=p>(</span><span class=mi>5</span><span class=p>);</span>
318
- </span><span id=__span-11-11><a id=__codelineno-11-11 name=__codelineno-11-11 href=#__codelineno-11-11></a><span class=n>msg</span><span class=p>.</span><span class=n>EmitGameObjectBroadcast</span><span class=p>(</span><span class=n>gameObject</span><span class=p>);</span>
319
- </span></code></pre></div> <p><strong>Verdict:</strong> For 1-3 simple events, C# events win on brevity. For 10+ events with complex flows, DxMessaging's structure pays dividends.</p> <h3 id=performance>Performance<a class=headerlink href=#performance title="Anchor link to this section">&para;</a></h3> <h4 id=what-you-give-up_2>What You Give Up<a class=headerlink href=#what-you-give-up_2 title="Anchor link to this section">&para;</a></h4> <ul> <li>❌ Absolute minimal overhead - Raw C# events/delegates are faster (~10ns per call)</li> <li>❌ Zero abstraction cost - Direct calls can be inlined by the compiler</li> <li>❌ Simplicity in profiler - One extra layer in call stack</li> </ul> <h4 id=what-you-gain_2>What You Gain<a class=headerlink href=#what-you-gain_2 title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ Zero-allocation struct messages - No GC pressure from boxing</li> <li>✅ Predictable performance - No hidden allocations from lambdas</li> <li>✅ Scalable diagnostics - Built-in profiling/logging without custom instrumentation</li> </ul> <h4 id=hard-numbers>Hard Numbers<a class=headerlink href=#hard-numbers title="Anchor link to this section">&para;</a></h4> <ul> <li>C# event invoke: ~50ns baseline</li> <li>DxMessaging handler: ~60ns (~10ns overhead)</li> <li>Memory: Zero allocations for struct messages</li> </ul> <p><strong>Verdict:</strong> For UI, gameplay events, scene management → DxMessaging overhead is negligible. For ECS architectures processing millions of events per frame → consider raw delegates or native code, which are better suited for that specific use case.</p> <h3 id=flexibility>Flexibility<a class=headerlink href=#flexibility title="Anchor link to this section">&para;</a></h3> <h4 id=what-you-give-up_3>What You Give Up<a class=headerlink href=#what-you-give-up_3 title="Anchor link to this section">&para;</a></h4> <ul> <li>❌ Return values - DxMessaging is fire-and-forget (no synchronous responses)</li> <li>❌ Out parameters - Can't use <code>out</code> or <code>ref</code> for bidirectional communication</li> <li>❌ Dynamic subscriptions - Can't easily pass lambdas inline</li> </ul> <h4 id=what-you-gain_3>What You Gain<a class=headerlink href=#what-you-gain_3 title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ Interception - Validate/transform messages before handlers</li> <li>✅ Post-processing - Analytics/logging without polluting handlers</li> <li>✅ Priority control - Explicit execution order</li> <li>✅ Context - Always know who sent/received</li> </ul> <h4 id=when-limitations-hurt>When Limitations Hurt<a class=headerlink href=#when-limitations-hurt title="Anchor link to this section">&para;</a></h4> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-12-1><a id=__codelineno-12-1 name=__codelineno-12-1 href=#__codelineno-12-1></a><span class=c1>// C# events can return values (DxMessaging can&#39;t)</span>
320
- </span><span id=__span-12-2><a id=__codelineno-12-2 name=__codelineno-12-2 href=#__codelineno-12-2></a><span class=k>public</span><span class=w> </span><span class=k>delegate</span><span class=w> </span><span class=kt>bool</span><span class=w> </span><span class=nf>DamageValidator</span><span class=p>(</span><span class=kt>int</span><span class=w> </span><span class=n>amount</span><span class=p>);</span>
321
- </span><span id=__span-12-3><a id=__codelineno-12-3 name=__codelineno-12-3 href=#__codelineno-12-3></a><span class=k>public</span><span class=w> </span><span class=k>event</span><span class=w> </span><span class=n>DamageValidator</span><span class=w> </span><span class=n>OnValidateDamage</span><span class=p>;</span>
322
- </span><span id=__span-12-4><a id=__codelineno-12-4 name=__codelineno-12-4 href=#__codelineno-12-4></a>
323
- </span><span id=__span-12-5><a id=__codelineno-12-5 name=__codelineno-12-5 href=#__codelineno-12-5></a><span class=k>if</span><span class=w> </span><span class=p>(</span><span class=n>OnValidateDamage</span><span class=o>?.</span><span class=n>Invoke</span><span class=p>(</span><span class=n>damage</span><span class=p>)</span><span class=w> </span><span class=o>==</span><span class=w> </span><span class=k>true</span><span class=p>)</span><span class=w> </span><span class=p>{</span>
324
- </span><span id=__span-12-6><a id=__codelineno-12-6 name=__codelineno-12-6 href=#__codelineno-12-6></a><span class=w> </span><span class=c1>// Allowed</span>
325
- </span><span id=__span-12-7><a id=__codelineno-12-7 name=__codelineno-12-7 href=#__codelineno-12-7></a><span class=p>}</span>
326
- </span><span id=__span-12-8><a id=__codelineno-12-8 name=__codelineno-12-8 href=#__codelineno-12-8></a>
327
- </span><span id=__span-12-9><a id=__codelineno-12-9 name=__codelineno-12-9 href=#__codelineno-12-9></a><span class=c1>// DxMessaging workaround: Use interceptors or separate query pattern</span>
328
- </span></code></pre></div> <p><strong>Verdict:</strong> If you need synchronous request/response, C# delegates/events or direct method calls are better. DxMessaging is designed for notifications and commands.</p> <h3 id=debuggability>Debuggability<a class=headerlink href=#debuggability title="Anchor link to this section">&para;</a></h3> <h4 id=what-you-give-up_4>What You Give Up<a class=headerlink href=#what-you-give-up_4 title="Anchor link to this section">&para;</a></h4> <ul> <li>❌ Simplicity - Stack traces show message bus internals</li> <li>❌ Step-through - Can't F11 directly from emit to handler (need breakpoints)</li> </ul> <h4 id=what-you-gain_4>What You Gain<a class=headerlink href=#what-you-gain_4 title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ Message history - See last N messages in Inspector</li> <li>✅ Registration view - Know exactly who's listening</li> <li>✅ Global observability - Track all messages without instrumenting code</li> <li>✅ Filtering - Intercept messages for debugging without changing code</li> </ul> <h4 id=example-finding-who-fired-a-message>Example: Finding Who Fired a Message<a class=headerlink href=#example-finding-who-fired-a-message title="Anchor link to this section">&para;</a></h4> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-13-1><a id=__codelineno-13-1 name=__codelineno-13-1 href=#__codelineno-13-1></a><span class=c1>// C# events: Set breakpoint on every possible Invoke(), or add logging everywhere</span>
329
- </span><span id=__span-13-2><a id=__codelineno-13-2 name=__codelineno-13-2 href=#__codelineno-13-2></a><span class=n>OnDamage</span><span class=o>?.</span><span class=n>Invoke</span><span class=p>(</span><span class=mi>5</span><span class=p>);</span><span class=w> </span><span class=c1>// Where did this come from??</span>
330
- </span><span id=__span-13-3><a id=__codelineno-13-3 name=__codelineno-13-3 href=#__codelineno-13-3></a>
331
- </span><span id=__span-13-4><a id=__codelineno-13-4 name=__codelineno-13-4 href=#__codelineno-13-4></a><span class=c1>// DxMessaging: Check Inspector message history or add global logger</span>
332
- </span><span id=__span-13-5><a id=__codelineno-13-5 name=__codelineno-13-5 href=#__codelineno-13-5></a><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>debugToken</span><span class=p>.</span><span class=n>RegisterBroadcastWithoutSource</span><span class=o>&lt;</span><span class=n>TookDamage</span><span class=o>&gt;</span><span class=p>(</span>
333
- </span><span id=__span-13-6><a id=__codelineno-13-6 name=__codelineno-13-6 href=#__codelineno-13-6></a><span class=w> </span><span class=p>(</span><span class=n>src</span><span class=p>,</span><span class=w> </span><span class=n>msg</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>$&quot;Damage from {src}: {msg.amount}&quot;</span><span class=p>)</span>
334
- </span><span id=__span-13-7><a id=__codelineno-13-7 name=__codelineno-13-7 href=#__codelineno-13-7></a><span class=p>);</span>
335
- </span></code></pre></div> <p><strong>Verdict:</strong> Initial debugging is slightly harder (extra layer), but systemic debugging is easier (observability tools).</p> <h3 id=coupling-and-architecture>Coupling and Architecture<a class=headerlink href=#coupling-and-architecture title="Anchor link to this section">&para;</a></h3> <h4 id=what-you-give-up_5>What You Give Up<a class=headerlink href=#what-you-give-up_5 title="Anchor link to this section">&para;</a></h4> <ul> <li>❌ Quick hacks - Can't just <code>GetComponent&lt;T&gt;().DoThing()</code> anymore</li> <li>❌ Direct inspector wiring - Can't drag-and-drop references to emit messages</li> </ul> <h4 id=what-you-gain_5>What You Gain<a class=headerlink href=#what-you-gain_5 title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ True decoupling - Systems don't know about each other</li> <li>✅ Testability - Easy to isolate with local buses</li> <li>✅ Refactorability - Move/rename components without breaking wiring</li> </ul> <h4 id=impact-on-architecture>Impact on Architecture<a class=headerlink href=#impact-on-architecture title="Anchor link to this section">&para;</a></h4> <p>Before (tight coupling):</p> <div class="language-text highlight"><span class=filename>Text Only</span><pre><span></span><code><span id=__span-14-1><a id=__codelineno-14-1 name=__codelineno-14-1 href=#__codelineno-14-1></a>UI → References 15 systems
336
- </span><span id=__span-14-2><a id=__codelineno-14-2 name=__codelineno-14-2 href=#__codelineno-14-2></a>System A → References System B, C, D
337
- </span><span id=__span-14-3><a id=__codelineno-14-3 name=__codelineno-14-3 href=#__codelineno-14-3></a>Every change ripples through dependencies
338
- </span></code></pre></div> <p>After (loose coupling):</p> <div class="language-text highlight"><span class=filename>Text Only</span><pre><span></span><code><span id=__span-15-1><a id=__codelineno-15-1 name=__codelineno-15-1 href=#__codelineno-15-1></a>All systems → Emit messages
339
- </span><span id=__span-15-2><a id=__codelineno-15-2 name=__codelineno-15-2 href=#__codelineno-15-2></a>All systems → Listen to messages
340
- </span><span id=__span-15-3><a id=__codelineno-15-3 name=__codelineno-15-3 href=#__codelineno-15-3></a>Add/remove systems without affecting others
341
- </span></code></pre></div> <p><strong>Verdict:</strong> If your project is &lt;5k lines, tight coupling is manageable. For larger projects, DxMessaging's decoupling significantly improves maintainability.</p> <h3 id=testing>Testing<a class=headerlink href=#testing title="Anchor link to this section">&para;</a></h3> <h4 id=what-you-give-up_6>What You Give Up<a class=headerlink href=#what-you-give-up_6 title="Anchor link to this section">&para;</a></h4> <ul> <li>❌ Simplicity - Can't just mock an event subscription</li> </ul> <h4 id=what-you-gain_6>What You Gain<a class=headerlink href=#what-you-gain_6 title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ Isolation - Local buses per test, zero global state</li> <li>✅ Observability - Count messages, inspect payloads easily</li> <li>✅ Determinism - Priority-based ordering eliminates flakiness</li> </ul> <h5 id=example>Example<a class=headerlink href=#example title="Anchor link to this section">&para;</a></h5> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-16-1><a id=__codelineno-16-1 name=__codelineno-16-1 href=#__codelineno-16-1></a><span class=c1>// Test with isolated bus</span>
342
- </span><span id=__span-16-2><a id=__codelineno-16-2 name=__codelineno-16-2 href=#__codelineno-16-2></a><span class=na>[Test]</span>
343
- </span><span id=__span-16-3><a id=__codelineno-16-3 name=__codelineno-16-3 href=#__codelineno-16-3></a><span class=k>public</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>TestAchievementSystem</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
344
- </span><span id=__span-16-4><a id=__codelineno-16-4 name=__codelineno-16-4 href=#__codelineno-16-4></a><span class=w> </span><span class=kt>var</span><span class=w> </span><span class=n>testBus</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>MessageBus</span><span class=p>();</span>
345
- </span><span id=__span-16-5><a id=__codelineno-16-5 name=__codelineno-16-5 href=#__codelineno-16-5></a><span class=w> </span><span class=kt>var</span><span class=w> </span><span class=n>token</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>MessageRegistrationToken</span><span class=p>.</span><span class=n>Create</span><span class=p>(</span><span class=n>achievementHandler</span><span class=p>,</span><span class=w> </span><span class=n>testBus</span><span class=p>);</span>
346
- </span><span id=__span-16-6><a id=__codelineno-16-6 name=__codelineno-16-6 href=#__codelineno-16-6></a>
347
- </span><span id=__span-16-7><a id=__codelineno-16-7 name=__codelineno-16-7 href=#__codelineno-16-7></a><span class=w> </span><span class=kt>var</span><span class=w> </span><span class=n>msg</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>EnemyKilled</span><span class=p>(</span><span class=s>&quot;Boss&quot;</span><span class=p>,</span><span class=w> </span><span class=mi>10</span><span class=p>);</span>
348
- </span><span id=__span-16-8><a id=__codelineno-16-8 name=__codelineno-16-8 href=#__codelineno-16-8></a><span class=w> </span><span class=n>msg</span><span class=p>.</span><span class=n>EmitGameObjectBroadcast</span><span class=p>(</span><span class=n>enemy</span><span class=p>,</span><span class=w> </span><span class=n>testBus</span><span class=p>);</span>
349
- </span><span id=__span-16-9><a id=__codelineno-16-9 name=__codelineno-16-9 href=#__codelineno-16-9></a>
350
- </span><span id=__span-16-10><a id=__codelineno-16-10 name=__codelineno-16-10 href=#__codelineno-16-10></a><span class=w> </span><span class=n>Assert</span><span class=p>.</span><span class=n>IsTrue</span><span class=p>(</span><span class=n>achievementSystem</span><span class=p>.</span><span class=n>Unlocked</span><span class=p>(</span><span class=s>&quot;BossSlayer&quot;</span><span class=p>));</span>
351
- </span><span id=__span-16-11><a id=__codelineno-16-11 name=__codelineno-16-11 href=#__codelineno-16-11></a><span class=p>}</span>
352
- </span></code></pre></div> <p><strong>Verdict:</strong> DxMessaging makes integration testing easier, unit testing slightly more verbose.</p> <h2 id=feature-by-feature-comparison-matrix>Feature-by-Feature Comparison Matrix<a class=headerlink href=#feature-by-feature-comparison-matrix title="Anchor link to this section">&para;</a></h2> <h3 id=unity-messaging-frameworks-comparison>Unity Messaging Frameworks Comparison<a class=headerlink href=#unity-messaging-frameworks-comparison title="Anchor link to this section">&para;</a></h3> <table> <thead> <tr> <th>Aspect</th> <th>DxMessaging</th> <th>UniRx</th> <th>MessagePipe</th> <th>Zenject Signals</th> </tr> </thead> <tbody> <tr> <td><strong>Primary Use Case</strong></td> <td>Pub/sub messaging</td> <td>Stream transformations</td> <td>High-perf DI messaging</td> <td>DI-integrated messaging</td> </tr> <tr> <td><strong>Unity Compatibility</strong></td> <td>✅ Built for Unity</td> <td>✅ Built for Unity</td> <td>✅ Built for Unity</td> <td>✅ Built for Unity</td> </tr> <tr> <td><strong>Performance</strong></td> <td>⭐⭐⭐⭐ Good (14M)</td> <td>⭐⭐⭐⭐ Good (18M)</td> <td>⭐⭐⭐⭐⭐ Best (97M)</td> <td>⭐⭐ Moderate (2.5M)</td> </tr> <tr> <td><strong>Zero Allocations</strong></td> <td>✅ Yes (structs)</td> <td>⚠️ Can allocate</td> <td>✅ Yes (structs)</td> <td>⚠️ Can allocate</td> </tr> <tr> <td><strong>Unity Integration</strong></td> <td>⭐⭐⭐⭐⭐ Deep (lifecycle)</td> <td>⭐⭐⭐⭐ Good (UI/async)</td> <td>⭐⭐⭐ Basic (no lifecycle)</td> <td>⭐⭐⭐⭐ Good (DI-managed)</td> </tr> <tr> <td><strong>Inspector Debugging</strong></td> <td>✅ Yes (history + stats)</td> <td>❌ No</td> <td>❌ No</td> <td>❌ No</td> </tr> <tr> <td><strong>Execution Order</strong></td> <td>✅ Priority-based</td> <td>❌ Not built-in</td> <td>❌ Subscription order</td> <td>❌ Not built-in</td> </tr> <tr> <td><strong>Lifecycle Management</strong></td> <td>✅ Automatic (MonoBehaviour)</td> <td>⚠️ Manual dispose</td> <td>⚠️ Manual dispose</td> <td>⚠️ DI-managed</td> </tr> <tr> <td><strong>Learning Curve</strong></td> <td>⭐⭐⭐ Moderate</td> <td>⭐⭐ Steep (Rx paradigm)</td> <td>⭐⭐⭐⭐ Moderate (DI)</td> <td>⭐⭐ Steep (DI+Signals)</td> </tr> <tr> <td><strong>Setup Complexity</strong></td> <td>⭐⭐⭐⭐⭐ Plug-and-play</td> <td>⭐⭐⭐⭐⭐ Low</td> <td>⭐⭐⭐ DI setup required</td> <td>⭐⭐ Installers required</td> </tr> <tr> <td><strong>DI Integration</strong></td> <td>⚠️ Optional</td> <td>⚠️ Optional</td> <td>✅ First-class</td> <td>✅ Required (Zenject)</td> </tr> <tr> <td><strong>Async/Await</strong></td> <td>⚠️ Manual</td> <td>✅ Native (observables)</td> <td>✅ Native</td> <td>✅ Yes</td> </tr> <tr> <td><strong>Message Validation</strong></td> <td>✅ Interceptor pipeline</td> <td>❌ Not built-in</td> <td>⚠️ Filters (middleware)</td> <td>❌ Not built-in</td> </tr> <tr> <td><strong>GameObject Targeting</strong></td> <td>✅ Built-in</td> <td>❌ Not designed for</td> <td>❌ Not built-in</td> <td>❌ Not built-in</td> </tr> <tr> <td><strong>Global Observers</strong></td> <td>✅ Listen to all sources</td> <td>❌ Not built-in</td> <td>❌ Not built-in</td> <td>❌ Not built-in</td> </tr> <tr> <td><strong>Post-Processing</strong></td> <td>✅ Dedicated stage</td> <td>❌ Not built-in</td> <td>⚠️ Via filters</td> <td>❌ Not built-in</td> </tr> <tr> <td><strong>Stream Operators</strong></td> <td>❌ Not built-in</td> <td>✅ Extensive (LINQ)</td> <td>❌ Not built-in</td> <td>⚠️ With UniRx</td> </tr> <tr> <td><strong>Testability</strong></td> <td>⭐⭐⭐⭐⭐ Local buses</td> <td>⭐⭐⭐⭐ Good</td> <td>⭐⭐⭐⭐⭐ DI mocking</td> <td>⭐⭐⭐⭐⭐ DI mocking</td> </tr> <tr> <td><strong>Decoupling</strong></td> <td>⭐⭐⭐⭐⭐ Excellent</td> <td>⭐⭐⭐⭐⭐ Excellent</td> <td>⭐⭐⭐⭐⭐ Excellent</td> <td>⭐⭐⭐⭐⭐ Excellent</td> </tr> <tr> <td><strong>Type Safety</strong></td> <td>⭐⭐⭐⭐⭐ Strong</td> <td>⭐⭐⭐⭐⭐ Strong</td> <td>⭐⭐⭐⭐⭐ Strong</td> <td>⭐⭐⭐⭐⭐ Strong</td> </tr> <tr> <td><strong>Dependencies</strong></td> <td>✅ None</td> <td>✅ None</td> <td>⚠️ MessagePipe package</td> <td>❌ Zenject required</td> </tr> </tbody> </table> <h3 id=traditional-approaches-comparison>Traditional Approaches Comparison<a class=headerlink href=#traditional-approaches-comparison title="Anchor link to this section">&para;</a></h3> <table> <thead> <tr> <th>Aspect</th> <th>C# Events</th> <th>UnityEvents</th> <th>SOA (GameEvent)</th> <th>Static Bus</th> <th>DxMessaging</th> </tr> </thead> <tbody> <tr> <td><strong>Setup Complexity</strong></td> <td>⭐⭐⭐⭐⭐ Minimal</td> <td>⭐⭐⭐⭐ Simple</td> <td>⭐⭐ Asset creation</td> <td>⭐⭐⭐ Moderate</td> <td>⭐⭐⭐ Moderate</td> </tr> <tr> <td><strong>Boilerplate</strong></td> <td>⭐⭐⭐⭐⭐ Low</td> <td>⭐⭐⭐⭐⭐ Low</td> <td>⭐⭐ High</td> <td>⭐⭐⭐ Medium</td> <td>⭐⭐⭐ Medium</td> </tr> <tr> <td><strong>Performance</strong></td> <td>⭐⭐⭐⭐⭐ Fastest</td> <td>⭐⭐ Slow (boxing)</td> <td>⭐⭐⭐ Moderate</td> <td>⭐⭐⭐⭐ Fast</td> <td>⭐⭐⭐⭐ Fast</td> </tr> <tr> <td><strong>Decoupling</strong></td> <td>⭐ Tight</td> <td>⭐⭐ Hidden</td> <td>⭐⭐⭐⭐ Good</td> <td>⭐⭐⭐⭐ Good</td> <td>⭐⭐⭐⭐⭐ Excellent</td> </tr> <tr> <td><strong>Designer Control</strong></td> <td>⭐ None</td> <td>⭐⭐⭐⭐⭐ High</td> <td>⭐⭐⭐⭐⭐ High</td> <td>⭐ None</td> <td>⭐ None</td> </tr> <tr> <td><strong>Lifecycle Safety</strong></td> <td>⭐ Manual</td> <td>⭐⭐⭐ Unity-managed</td> <td>⭐⭐ Manual persist</td> <td>⭐ Manual</td> <td>⭐⭐⭐⭐⭐ Automatic</td> </tr> <tr> <td><strong>Observability</strong></td> <td>⭐ None</td> <td>⭐ None</td> <td>⭐ Inspector only</td> <td>⭐ None</td> <td>⭐⭐⭐⭐⭐ Built-in</td> </tr> <tr> <td><strong>Execution Order</strong></td> <td>⭐ Undefined</td> <td>⭐ Undefined</td> <td>⭐ Undefined</td> <td>⭐ Undefined</td> <td>⭐⭐⭐⭐⭐ Priority-based</td> </tr> <tr> <td><strong>Type Safety</strong></td> <td>⭐⭐⭐⭐⭐ Strong</td> <td>⭐⭐ Weak</td> <td>⭐⭐⭐ Mixed</td> <td>⭐⭐⭐ Varies</td> <td>⭐⭐⭐⭐⭐ Strong</td> </tr> <tr> <td><strong>Testability</strong></td> <td>⭐⭐ Hard</td> <td>⭐⭐ Hard</td> <td>⭐ Very Hard</td> <td>⭐ Very Hard</td> <td>⭐⭐⭐⭐⭐ Easy</td> </tr> <tr> <td><strong>Learning Curve</strong></td> <td>⭐⭐⭐⭐⭐ Minimal</td> <td>⭐⭐⭐⭐⭐ Minimal</td> <td>⭐⭐⭐ Moderate</td> <td>⭐⭐⭐⭐ Low</td> <td>⭐⭐⭐ Moderate</td> </tr> <tr> <td><strong>Memory Safety</strong></td> <td>⭐ Leak-prone</td> <td>⭐⭐⭐ Unity-managed</td> <td>⭐⭐ Asset persist</td> <td>⭐ Leak-prone</td> <td>⭐⭐⭐⭐⭐ Leak-free</td> </tr> <tr> <td><strong>Debugging</strong></td> <td>⭐⭐ Hard at scale</td> <td>⭐⭐ Hard at scale</td> <td>⭐⭐ Inspector-only</td> <td>⭐ Very Hard</td> <td>⭐⭐⭐⭐⭐ Excellent</td> </tr> </tbody> </table> <h3 id=overall-verdict-by-use-case>Overall Verdict by Use Case<a class=headerlink href=#overall-verdict-by-use-case title="Anchor link to this section">&para;</a></h3> <ul> <li><strong>Small prototype/jam:</strong> C# Events or UnityEvents win (simplicity &gt; all)</li> <li><strong>Mid-size game (5-20k lines):</strong> DxMessaging starts paying off (decoupling, debugging)</li> <li><strong>Large game (20k+ lines):</strong> DxMessaging essential for maintainability</li> <li><strong>Designer-driven workflow:</strong> SOA has value (Inspector wiring) but consider maintenance costs</li> <li><strong>Legacy SOA project:</strong> Use Pattern B (keep SOs for configs, migrate events to DxMessaging)</li> <li><strong>Performance-critical (millions of messages/frame):</strong> MessagePipe offers the highest throughput</li> <li><strong>Performance-critical (Unity-specific):</strong> DxMessaging (strong performance + Unity integration)</li> <li><strong>UI-heavy:</strong> DxMessaging provides decoupled updates and global observers for UI state</li> <li><strong>Complex event transformations:</strong> UniRx provides reactive stream operators</li> <li><strong>DI-first architecture:</strong> MessagePipe or Zenject Signals win (DI integration)</li> <li><strong>Analytics/diagnostics heavy:</strong> DxMessaging provides built-in support (global observers, post-processors, Inspector)</li> <li><strong>Need execution control:</strong> DxMessaging offers priorities, interceptors, and ordered stages</li> </ul> <h2 id=when-each-approach-actually-wins>When Each Approach ACTUALLY Wins<a class=headerlink href=#when-each-approach-actually-wins title="Anchor link to this section">&para;</a></h2> <h3 id=dxmessaging-wins-when>DxMessaging Wins When<a class=headerlink href=#dxmessaging-wins-when title="Anchor link to this section">&para;</a></h3> <ul> <li>✅ Unity-first projects (MonoBehaviour lifecycle integration)</li> <li>✅ 10+ systems that communicate (pub/sub decoupling)</li> <li>✅ Observability essential (Inspector debugging, message history)</li> <li>✅ Memory leaks are a concern (automatic lifecycle management)</li> <li>✅ Cross-team development (clear message contracts)</li> <li>✅ Long-term maintenance (years, not weeks)</li> <li>✅ GameObject/Component targeting needed (Unity-specific patterns)</li> <li>✅ Execution order control essential (priority-based handlers)</li> <li>✅ Message validation/transformation needed (interceptor pipeline)</li> <li>✅ Global observation needed (listen to all message instances)</li> <li>✅ Post-processing needed (analytics, logging after handlers)</li> <li>✅ Late update semantics needed (timing-specific processing)</li> <li>✅ Teams without DI experience (no framework dependencies)</li> <li>✅ Want plug-and-play solution (zero dependencies, immediate use)</li> </ul> <h3 id=unirx-wins-when>UniRx Wins When<a class=headerlink href=#unirx-wins-when title="Anchor link to this section">&para;</a></h3> <ul> <li>✅ Simple pub/sub with minimal setup (MessageBroker is straightforward)</li> <li>✅ Complex event stream transformations needed</li> <li>✅ Time-based operations (throttle, debounce, buffer)</li> <li>✅ Combining multiple input sources</li> <li>✅ Reactive UI data binding</li> <li>✅ Team familiar with reactive programming</li> <li>✅ Need LINQ-style query operators on events</li> <li>✅ Async operations with cancellation and composition</li> </ul> <h3 id=messagepipe-wins-when>MessagePipe Wins When<a class=headerlink href=#messagepipe-wins-when title="Anchor link to this section">&para;</a></h3> <ul> <li>✅ Performance is THE priority (highest throughput)</li> <li>✅ Already using DI (VContainer, Zenject, etc.)</li> <li>✅ Cross-platform .NET projects (not Unity-only)</li> <li>✅ Need native async/await support</li> <li>✅ Large-scale projects with DI architecture</li> <li>✅ Want compile-time leak detection (Roslyn analyzer)</li> <li>✅ High message frequency (thousands/frame)</li> </ul> <h3 id=zenject-signals-win-when>Zenject Signals Win When<a class=headerlink href=#zenject-signals-win-when title="Anchor link to this section">&para;</a></h3> <ul> <li>✅ Already using Zenject for dependency injection</li> <li>✅ Testability through DI is critical</li> <li>✅ Need subscriber validation (ensure handlers exist)</li> <li>✅ Team experienced with Zenject</li> <li>✅ Want DI-managed lifecycle</li> <li>✅ Integration with existing Zenject architecture</li> </ul> <h3 id=c-events-win-when>C# Events Win When<a class=headerlink href=#c-events-win-when title="Anchor link to this section">&para;</a></h3> <ul> <li>✅ You need return values or out parameters</li> <li>✅ Writing a library (DxMessaging is Unity-specific)</li> <li>✅ Small, stable scope (5-10 events max)</li> <li>✅ Team is C# experts, Unity beginners</li> </ul> <h3 id=unityevents-win-when>UnityEvents Win When<a class=headerlink href=#unityevents-win-when title="Anchor link to this section">&para;</a></h3> <ul> <li>✅ Designers need to wire logic without code</li> <li>✅ Rapid prototyping with prefabs</li> <li>✅ Very simple games (mobile casual, hyper-casual)</li> </ul> <h3 id=soa-gameeventvariables-wins-when>SOA (GameEvent/Variables) Wins When<a class=headerlink href=#soa-gameeventvariables-wins-when title="Anchor link to this section">&para;</a></h3> <ul> <li>✅ Designers must create and wire events without touching code</li> <li>✅ Team is already heavily invested in SOA with many existing assets</li> <li>✅ Designer empowerment is the absolute top priority</li> <li>⚠️ <strong>BUT:</strong> Consider migration costs and maintainability issues (see <a href=https://github.com/cathei/AntiScriptableObjectArchitecture>Anti-SOA critique</a>)</li> <li>⚠️ <strong>Alternative:</strong> Use ScriptableObjects for configs only + DxMessaging for events (Pattern B in <a href=../../guides/patterns/#14-compatibility-with-scriptable-object-architecture-soa>SOA Guide</a>)</li> </ul> <h3 id=static-event-bus-wins-when>Static Event Bus Wins When<a class=headerlink href=#static-event-bus-wins-when title="Anchor link to this section">&para;</a></h3> <ul> <li>✅ You've already built one and it works</li> <li>✅ Very simple use cases (just need globals)</li> </ul> <h2 id=cost-benefit-summary>Cost-Benefit Summary<a class=headerlink href=#cost-benefit-summary title="Anchor link to this section">&para;</a></h2> <h3 id=costs>Costs<a class=headerlink href=#costs title="Anchor link to this section">&para;</a></h3> <ol> <li>Learning curve (~1-2 days to feel comfortable)</li> <li>More upfront code (message definitions)</li> <li>Slightly slower than raw C# events (~10ns/call)</li> <li>Can't return values (fire-and-forget only)</li> </ol> <h3 id=benefits>Benefits<a class=headerlink href=#benefits title="Anchor link to this section">&para;</a></h3> <ol> <li>Automatic lifecycle prevents common memory leaks</li> <li>Full decoupling (systems don't reference each other)</li> <li>Observability (Inspector diagnostics, message history)</li> <li>Predictable ordering (priority-based execution)</li> <li>Interception/validation (before handlers run)</li> <li>Testability (isolated buses)</li> </ol> <p><strong>Break-even point:</strong> Usually around 10-20 hours into a project, when event management becomes painful.</p> <h2 id=making-the-decision-be-honest-with-yourself>Making the Decision (Be Honest With Yourself)<a class=headerlink href=#making-the-decision-be-honest-with-yourself title="Anchor link to this section">&para;</a></h2> <h3 id=answer-these-questions-honestly>Answer these questions honestly<a class=headerlink href=#answer-these-questions-honestly title="Anchor link to this section">&para;</a></h3> <h3 id=1-project-lifespan>1. Project Lifespan?<a class=headerlink href=#1-project-lifespan title="Anchor link to this section">&para;</a></h3> <ul> <li><strong>&lt;1 week (game jam):</strong> Skip DxMessaging → Use C# events or direct calls</li> <li><strong>1-4 weeks (prototype):</strong> Maybe → If you plan to continue, use DxMessaging</li> <li><strong>1+ months (real project):</strong> Yes → DxMessaging will save you time</li> <li><strong>6+ months (production):</strong> Absolutely → You'll thank yourself later</li> </ul> <h3 id=2-team-size>2. Team Size?<a class=headerlink href=#2-team-size title="Anchor link to this section">&para;</a></h3> <ul> <li><strong>Solo dev:</strong> Optional → Depends on project complexity</li> <li><strong>2-3 devs:</strong> Valuable → Reduces communication overhead</li> <li><strong>4+ devs:</strong> Highly recommended → Clear contracts between systems</li> <li><strong>Remote/distributed team:</strong> Essential → Explicit message contracts prevent miscommunication</li> </ul> <h3 id=3-codebase-size>3. Codebase Size?<a class=headerlink href=#3-codebase-size title="Anchor link to this section">&para;</a></h3> <ul> <li><strong>&lt;1k lines:</strong> Skip it → Direct method calls are fine</li> <li><strong>1k-5k lines:</strong> Consider it → If you're growing fast</li> <li><strong>5k-20k lines:</strong> Recommended → Coupling becomes painful</li> <li><strong>20k+ lines:</strong> Absolutely → Refactoring becomes significantly more challenging without it</li> </ul> <h3 id=4-how-many-systems-need-to-communicate>4. How Many Systems Need to Communicate?<a class=headerlink href=#4-how-many-systems-need-to-communicate title="Anchor link to this section">&para;</a></h3> <ul> <li><strong>1-2 systems:</strong> Skip → Just call methods directly</li> <li><strong>3-5 systems:</strong> Consider → If they don't share references</li> <li><strong>6-10 systems:</strong> Recommended → Coupling becomes unmanageable</li> <li><strong>10+ systems:</strong> Essential → Managing many SerializeField references becomes difficult</li> </ul> <h3 id=5-have-you-had-memory-leaks-from-forgotten-unsubscribes>5. Have You Had Memory Leaks From Forgotten Unsubscribes?<a class=headerlink href=#5-have-you-had-memory-leaks-from-forgotten-unsubscribes title="Anchor link to this section">&para;</a></h3> <ul> <li><strong>Never:</strong> Optional → You may not need automatic lifecycle management</li> <li><strong>Once or twice:</strong> Consider it → Prevention is cheaper than debugging</li> <li><strong>Multiple times:</strong> Recommended → Automatic cleanup would help</li> <li><strong>Currently debugging one:</strong> Strongly recommended → Consider adopting DxMessaging</li> </ul> <h3 id=6-how-often-do-you-debug-what-fired-when>6. How Often Do You Debug "What Fired When?"<a class=headerlink href=#6-how-often-do-you-debug-what-fired-when title="Anchor link to this section">&para;</a></h3> <ul> <li><strong>Never:</strong> Likely not needed → Small projects may not require message debugging tools</li> <li><strong>Rarely:</strong> Optional, but would help</li> <li><strong>Monthly:</strong> Recommended → Inspector diagnostics will save hours</li> <li><strong>Weekly:</strong> Strongly recommended → Debugging tools would provide significant time savings</li> </ul> <h3 id=quick-decision-matrix>Quick Decision Matrix<a class=headerlink href=#quick-decision-matrix title="Anchor link to this section">&para;</a></h3> <div class="language-text highlight"><span class=filename>Text Only</span><pre><span></span><code><span id=__span-17-1><a id=__codelineno-17-1 name=__codelineno-17-1 href=#__codelineno-17-1></a>Game Jam → C# Events (speed over safety)
353
- </span><span id=__span-17-2><a id=__codelineno-17-2 name=__codelineno-17-2 href=#__codelineno-17-2></a>Prototype → DxMessaging IF continuing, else C# Events
354
- </span><span id=__span-17-3><a id=__codelineno-17-3 name=__codelineno-17-3 href=#__codelineno-17-3></a>Production → DxMessaging (unless &lt;1k lines)
355
- </span><span id=__span-17-4><a id=__codelineno-17-4 name=__codelineno-17-4 href=#__codelineno-17-4></a>Legacy codebase → Migrate gradually (see Migration Guide)
356
- </span></code></pre></div> <h3 id=the-real-question>The Real Question<a class=headerlink href=#the-real-question title="Anchor link to this section">&para;</a></h3> <h4 id=will-this-project-still-exist-in-3-months>"Will this project still exist in 3 months?"<a class=headerlink href=#will-this-project-still-exist-in-3-months title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>No:</strong> C# events are fine</li> <li><strong>Yes:</strong> Use DxMessaging</li> </ul> <h5 id=will-anyone-else-work-on-this-code>"Will anyone else work on this code?"<a class=headerlink href=#will-anyone-else-work-on-this-code title="Anchor link to this section">&para;</a></h5> <ul> <li><strong>No:</strong> C# events might be okay</li> <li><strong>Yes:</strong> Use DxMessaging (future you counts as "someone else")</li> </ul> <h3 id=rule-of-thumb>Rule of Thumb<a class=headerlink href=#rule-of-thumb title="Anchor link to this section">&para;</a></h3> <p>If you're reading this and thinking:</p> <ul> <li><strong>"I've experienced these pain points"</strong> → DxMessaging will help</li> <li><strong>"This seems like overkill"</strong> → You probably don't need it yet</li> <li><strong>"I need this yesterday"</strong> → DxMessaging may be a good fit</li> </ul> <p>See also</p> <ul> <li><a href=../../concepts/message-types/ >Message Types</a></li> <li><a href=../../guides/diagnostics/ >Diagnostics (Editor inspector)</a></li> <li><a href=../../guides/migration-guide/ >Migration Guide</a> - How to adopt gradually</li> </ul> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title="Last update"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago" title="January 27, 2026 04:59:07 UTC"><span class=timeago datetime=2026-01-27T04:59:07+00:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date" title="January 27, 2026 04:59:07 UTC">2026-01-27</span> </span> <span class=md-source-file__fact> <span class=md-icon title=Created> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago" title="January 27, 2026 04:59:07 UTC"><span class=timeago datetime=2026-01-27T04:59:07+00:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date" title="January 27, 2026 04:59:07 UTC">2026-01-27</span> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=Footer> <a href=../design-and-architecture/ class="md-footer__link md-footer__link--prev" aria-label="Previous: Design & Architecture"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> Previous </span> <div class=md-ellipsis> Design & Architecture </div> </div> </a> <a href=../performance/ class="md-footer__link md-footer__link--next" aria-label="Next: Performance"> <div class=md-footer__title> <span class=md-footer__direction> Next </span> <div class=md-ellipsis> Performance </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2017-2026 Wallstop Studios </div> </div> <div class=md-social> <a href=https://github.com/wallstop target=_blank rel=noopener title="Wallstop Studios on GitHub" class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <script id=__config type=application/json>{"annotate": null, "base": "../..", "features": ["announce.dismiss", "content.action.edit", "content.action.view", "content.code.annotate", "content.code.copy", "content.tabs.link", "navigation.expand", "navigation.footer", "navigation.indexes", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress", "navigation.path", "navigation.sections", "navigation.tabs", "navigation.tabs.sticky", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "search.suggest", "toc.follow"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script src=../../assets/javascripts/bundle.79ae519e.min.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> <script src=https://unpkg.com/mermaid@11/dist/mermaid.min.js></script> <script src=../../javascripts/mermaid-config.js></script> <script src=../../javascripts/csharp-highlight.js></script> </body> </html>