com.wallstop-studios.dxmessaging 2.1.9 → 3.0.1

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 (249) hide show
  1. package/CHANGELOG.md +106 -65
  2. package/CHANGELOG.md.meta +7 -7
  3. package/Editor/Analyzers/BaseCallIlInspector.cs +277 -0
  4. package/Editor/Analyzers/BaseCallIlInspector.cs.meta +11 -0
  5. package/Editor/Analyzers/BaseCallLogMessageParser.cs +295 -0
  6. package/Editor/Analyzers/BaseCallLogMessageParser.cs.meta +11 -0
  7. package/Editor/Analyzers/BaseCallReportAggregator.cs +308 -0
  8. package/Editor/Analyzers/BaseCallReportAggregator.cs.meta +11 -0
  9. package/Editor/Analyzers/BaseCallTypeScanner.cs +110 -0
  10. package/Editor/Analyzers/BaseCallTypeScanner.cs.meta +11 -0
  11. package/Editor/Analyzers/BaseCallTypeScannerCore.cs +562 -0
  12. package/Editor/Analyzers/BaseCallTypeScannerCore.cs.meta +11 -0
  13. package/Editor/Analyzers/DxMessagingConsoleHarvester.cs +1122 -0
  14. package/Editor/Analyzers/DxMessagingConsoleHarvester.cs.meta +11 -0
  15. package/Editor/Analyzers/Microsoft.CodeAnalysis.CSharp.dll.meta +44 -44
  16. package/Editor/Analyzers/Microsoft.CodeAnalysis.dll.meta +44 -44
  17. package/Editor/Analyzers/System.Collections.Immutable.dll.meta +44 -44
  18. package/Editor/Analyzers/System.Reflection.Metadata.dll.meta +44 -44
  19. package/Editor/Analyzers/System.Runtime.CompilerServices.Unsafe.dll.meta +44 -44
  20. package/Editor/Analyzers/WallstopStudios.DxMessaging.Analyzer.dll +0 -0
  21. package/Editor/Analyzers/WallstopStudios.DxMessaging.Analyzer.dll.meta +33 -0
  22. package/Editor/Analyzers/WallstopStudios.DxMessaging.SourceGenerators.dll +0 -0
  23. package/Editor/Analyzers/WallstopStudios.DxMessaging.SourceGenerators.dll.meta +72 -72
  24. package/Editor/Analyzers.meta +8 -8
  25. package/Editor/AssemblyInfo.cs.meta +3 -3
  26. package/Editor/CustomEditors/MessageAwareComponentFallbackEditor.cs +81 -0
  27. package/Editor/CustomEditors/MessageAwareComponentFallbackEditor.cs.meta +11 -0
  28. package/Editor/CustomEditors/MessageAwareComponentInspectorOverlay.cs +420 -0
  29. package/Editor/CustomEditors/MessageAwareComponentInspectorOverlay.cs.meta +11 -0
  30. package/Editor/CustomEditors/MessagingComponentEditor.cs +1 -1
  31. package/Editor/CustomEditors/MessagingComponentEditor.cs.meta +2 -2
  32. package/Editor/CustomEditors.meta +2 -2
  33. package/Editor/DxMessagingEditorInitializer.cs +1 -1
  34. package/Editor/DxMessagingEditorInitializer.cs.meta +2 -2
  35. package/Editor/DxMessagingMenu.cs.meta +11 -11
  36. package/Editor/DxMessagingSceneBuildProcessor.cs.meta +11 -11
  37. package/Editor/Settings/DxMessagingBaseCallIgnoreSync.cs +190 -0
  38. package/Editor/Settings/DxMessagingBaseCallIgnoreSync.cs.meta +11 -0
  39. package/Editor/Settings/DxMessagingSettings.cs +189 -0
  40. package/Editor/Settings/DxMessagingSettings.cs.meta +2 -2
  41. package/Editor/Settings/DxMessagingSettingsProvider.cs +50 -33
  42. package/Editor/Settings/DxMessagingSettingsProvider.cs.meta +2 -2
  43. package/Editor/Settings.meta +2 -2
  44. package/Editor/SetupCscRsp.cs +209 -8
  45. package/Editor/SetupCscRsp.cs.meta +2 -2
  46. package/Editor/Testing/MessagingComponentEditorHarness.cs +1 -1
  47. package/Editor/Testing/MessagingComponentEditorHarness.cs.meta +3 -3
  48. package/Editor/Testing.meta +3 -3
  49. package/Editor/WallstopStudios.DxMessaging.Editor.asmdef +14 -14
  50. package/Editor/WallstopStudios.DxMessaging.Editor.asmdef.meta +7 -7
  51. package/Editor.meta +8 -8
  52. package/LICENSE.md +9 -9
  53. package/LICENSE.md.meta +7 -7
  54. package/README.md +941 -900
  55. package/README.md.meta +7 -7
  56. package/Runtime/AssemblyInfo.cs +4 -0
  57. package/Runtime/AssemblyInfo.cs.meta +2 -2
  58. package/Runtime/Core/Attributes/DxAutoConstructorAttribute.cs.meta +2 -2
  59. package/Runtime/Core/Attributes/DxBroadcastMessageAttribute.cs.meta +2 -2
  60. package/Runtime/Core/Attributes/DxIgnoreMissingBaseCallAttribute.cs +26 -0
  61. package/Runtime/Core/Attributes/DxIgnoreMissingBaseCallAttribute.cs.meta +11 -0
  62. package/Runtime/Core/Attributes/DxOptionalParameterAttribute.cs.meta +2 -2
  63. package/Runtime/Core/Attributes/DxTargetedMessageAttribute.cs.meta +2 -2
  64. package/Runtime/Core/Attributes/DxUntargetedMessageAttribute.cs.meta +2 -2
  65. package/Runtime/Core/Attributes.meta +2 -2
  66. package/Runtime/Core/Configuration/DxMessagingRuntimeSettings.cs +195 -0
  67. package/Runtime/Core/Configuration/DxMessagingRuntimeSettings.cs.meta +11 -0
  68. package/Runtime/Core/Configuration/DxMessagingRuntimeSettingsProvider.cs +179 -0
  69. package/Runtime/Core/Configuration/DxMessagingRuntimeSettingsProvider.cs.meta +11 -0
  70. package/Runtime/Core/Configuration.meta +9 -0
  71. package/Runtime/Core/DataStructure/CyclicBuffer.cs +2 -2
  72. package/Runtime/Core/DataStructure/CyclicBuffer.cs.meta +2 -2
  73. package/Runtime/Core/DataStructure.meta +2 -2
  74. package/Runtime/Core/Diagnostics/MessageEmissionData.cs.meta +2 -2
  75. package/Runtime/Core/Diagnostics/MessageRegistrationData.cs.meta +2 -2
  76. package/Runtime/Core/Diagnostics/MessageRegistrationType.cs.meta +2 -2
  77. package/Runtime/Core/Diagnostics.meta +2 -2
  78. package/Runtime/Core/DxMessagingStaticState.cs +19 -0
  79. package/Runtime/Core/DxMessagingStaticState.cs.meta +11 -11
  80. package/Runtime/Core/Extensions/EnumExtensions.cs.meta +2 -2
  81. package/Runtime/Core/Extensions/IListExtensions.cs.meta +2 -2
  82. package/Runtime/Core/Extensions/MessageBusExtensions.cs.meta +12 -12
  83. package/Runtime/Core/Extensions/MessageExtensions.cs.meta +11 -11
  84. package/Runtime/Core/Extensions.meta +8 -8
  85. package/Runtime/Core/Helper/MessageCache.cs +32 -0
  86. package/Runtime/Core/Helper/MessageCache.cs.meta +2 -2
  87. package/Runtime/Core/Helper/MessageHelperIndexer.cs.meta +2 -2
  88. package/Runtime/Core/Helper.meta +2 -2
  89. package/Runtime/Core/IMessage.cs +3 -3
  90. package/Runtime/Core/IMessage.cs.meta +11 -11
  91. package/Runtime/Core/InstanceId.cs.meta +11 -11
  92. package/Runtime/Core/Internal/TypedDispatchLinkIndex.cs +51 -0
  93. package/Runtime/Core/Internal/TypedDispatchLinkIndex.cs.meta +11 -0
  94. package/Runtime/Core/Internal/TypedGlobalSlotIndex.cs +38 -0
  95. package/Runtime/Core/Internal/TypedGlobalSlotIndex.cs.meta +11 -0
  96. package/Runtime/Core/Internal/TypedSlotIndex.cs +81 -0
  97. package/Runtime/Core/Internal/TypedSlotIndex.cs.meta +11 -0
  98. package/Runtime/Core/Internal/TypedSlots.cs +613 -0
  99. package/Runtime/Core/Internal/TypedSlots.cs.meta +11 -0
  100. package/Runtime/Core/Internal.meta +9 -0
  101. package/Runtime/Core/MessageBus/DiagnosticsTarget.cs.meta +11 -11
  102. package/Runtime/Core/MessageBus/GlobalMessageBusProvider.cs.meta +11 -11
  103. package/Runtime/Core/MessageBus/IMessageBus.cs +177 -3
  104. package/Runtime/Core/MessageBus/IMessageBus.cs.meta +11 -11
  105. package/Runtime/Core/MessageBus/IMessageBusProvider.cs.meta +11 -11
  106. package/Runtime/Core/MessageBus/IMessageRegistrationBuilder.cs.meta +11 -11
  107. package/Runtime/Core/MessageBus/Internal/BusContextIndex.cs +16 -0
  108. package/Runtime/Core/MessageBus/Internal/BusContextIndex.cs.meta +11 -0
  109. package/Runtime/Core/MessageBus/Internal/BusSinkIndex.cs +40 -0
  110. package/Runtime/Core/MessageBus/Internal/BusSinkIndex.cs.meta +11 -0
  111. package/Runtime/Core/MessageBus/Internal/BusSlots.cs +718 -0
  112. package/Runtime/Core/MessageBus/Internal/BusSlots.cs.meta +11 -0
  113. package/Runtime/Core/MessageBus/Internal/DispatchKind.cs +38 -0
  114. package/Runtime/Core/MessageBus/Internal/DispatchKind.cs.meta +11 -0
  115. package/Runtime/Core/MessageBus/Internal/DispatchPhase.cs +20 -0
  116. package/Runtime/Core/MessageBus/Internal/DispatchPhase.cs.meta +11 -0
  117. package/Runtime/Core/MessageBus/Internal/DispatchVariant.cs +28 -0
  118. package/Runtime/Core/MessageBus/Internal/DispatchVariant.cs.meta +11 -0
  119. package/Runtime/Core/MessageBus/Internal/IEvictableSlot.cs +48 -0
  120. package/Runtime/Core/MessageBus/Internal/IEvictableSlot.cs.meta +11 -0
  121. package/Runtime/Core/MessageBus/Internal/ISweepable.cs +15 -0
  122. package/Runtime/Core/MessageBus/Internal/ISweepable.cs.meta +11 -0
  123. package/Runtime/Core/MessageBus/Internal/RegistrationMethodAxes.cs +222 -0
  124. package/Runtime/Core/MessageBus/Internal/RegistrationMethodAxes.cs.meta +11 -0
  125. package/Runtime/Core/MessageBus/Internal/SlotKey.cs +192 -0
  126. package/Runtime/Core/MessageBus/Internal/SlotKey.cs.meta +11 -0
  127. package/Runtime/Core/MessageBus/Internal.meta +9 -0
  128. package/Runtime/Core/MessageBus/MessageBus.cs +2651 -500
  129. package/Runtime/Core/MessageBus/MessageBus.cs.meta +11 -11
  130. package/Runtime/Core/MessageBus/MessageBusRebindMode.cs.meta +11 -11
  131. package/Runtime/Core/MessageBus/MessageRegistrationBuilder.cs.meta +11 -11
  132. package/Runtime/Core/MessageBus/MessagingRegistration.cs.meta +11 -11
  133. package/Runtime/Core/MessageBus/RegistrationLog.cs.meta +11 -11
  134. package/Runtime/Core/MessageBus.meta +8 -8
  135. package/Runtime/Core/MessageHandler.cs +2019 -542
  136. package/Runtime/Core/MessageHandler.cs.meta +11 -11
  137. package/Runtime/Core/MessageRegistrationHandle.cs.meta +11 -11
  138. package/Runtime/Core/MessageRegistrationToken.cs +7 -0
  139. package/Runtime/Core/MessageRegistrationToken.cs.meta +11 -11
  140. package/Runtime/Core/Messages/GlobalStringMessage.cs.meta +2 -2
  141. package/Runtime/Core/Messages/IBroadcastMessage.cs.meta +11 -11
  142. package/Runtime/Core/Messages/ITargetedMessage.cs.meta +11 -11
  143. package/Runtime/Core/Messages/IUntargetedMessage.cs.meta +11 -11
  144. package/Runtime/Core/Messages/ReflexiveMessage.cs.meta +2 -2
  145. package/Runtime/Core/Messages/SourcedStringMessage.cs.meta +11 -11
  146. package/Runtime/Core/Messages/StringMessage.cs.meta +2 -2
  147. package/Runtime/Core/Messages.meta +8 -8
  148. package/Runtime/Core/MessagingDebug.cs.meta +11 -11
  149. package/Runtime/Core/Pooling/CollectionPool.cs +266 -0
  150. package/Runtime/Core/Pooling/CollectionPool.cs.meta +11 -0
  151. package/Runtime/Core/Pooling/CollectionPoolDiagnostics.cs +30 -0
  152. package/Runtime/Core/Pooling/CollectionPoolDiagnostics.cs.meta +11 -0
  153. package/Runtime/Core/Pooling/DxPools.cs +157 -0
  154. package/Runtime/Core/Pooling/DxPools.cs.meta +11 -0
  155. package/Runtime/Core/Pooling/EvictionPlayerLoopHook.cs +106 -0
  156. package/Runtime/Core/Pooling/EvictionPlayerLoopHook.cs.meta +11 -0
  157. package/Runtime/Core/Pooling/IDxMessagingClock.cs +18 -0
  158. package/Runtime/Core/Pooling/IDxMessagingClock.cs.meta +11 -0
  159. package/Runtime/Core/Pooling/PoolDiagnosticsSnapshot.cs +55 -0
  160. package/Runtime/Core/Pooling/PoolDiagnosticsSnapshot.cs.meta +11 -0
  161. package/Runtime/Core/Pooling/StopwatchClock.cs +27 -0
  162. package/Runtime/Core/Pooling/StopwatchClock.cs.meta +11 -0
  163. package/Runtime/Core/Pooling/UnityRealtimeClock.cs +31 -0
  164. package/Runtime/Core/Pooling/UnityRealtimeClock.cs.meta +11 -0
  165. package/Runtime/Core/Pooling.meta +9 -0
  166. package/Runtime/Core.meta +8 -8
  167. package/Runtime/Unity/CurrentGlobalMessageBusProvider.cs.meta +12 -12
  168. package/Runtime/Unity/DxMessagingRuntimeInitializer.cs.meta +11 -11
  169. package/Runtime/Unity/InitialGlobalMessageBusProvider.cs.meta +12 -12
  170. package/Runtime/Unity/Integrations/Reflex/AssemblyInfo.cs.meta +2 -2
  171. package/Runtime/Unity/Integrations/Reflex/ReflexRegistrationInstaller.cs +73 -0
  172. package/Runtime/Unity/Integrations/Reflex/ReflexRegistrationInstaller.cs.meta +11 -11
  173. package/Runtime/Unity/Integrations/Reflex/WallstopStudios.DxMessaging.Reflex.asmdef +20 -20
  174. package/Runtime/Unity/Integrations/Reflex/WallstopStudios.DxMessaging.Reflex.asmdef.meta +7 -7
  175. package/Runtime/Unity/Integrations/Reflex.meta +8 -8
  176. package/Runtime/Unity/Integrations/VContainer/AssemblyInfo.cs.meta +2 -2
  177. package/Runtime/Unity/Integrations/VContainer/VContainerRegistrationExtensions.cs +109 -1
  178. package/Runtime/Unity/Integrations/VContainer/VContainerRegistrationExtensions.cs.meta +11 -11
  179. package/Runtime/Unity/Integrations/VContainer/WallstopStudios.DxMessaging.VContainer.asmdef +30 -30
  180. package/Runtime/Unity/Integrations/VContainer/WallstopStudios.DxMessaging.VContainer.asmdef.meta +7 -7
  181. package/Runtime/Unity/Integrations/VContainer.meta +8 -8
  182. package/Runtime/Unity/Integrations/Zenject/AssemblyInfo.cs.meta +2 -2
  183. package/Runtime/Unity/Integrations/Zenject/WallstopStudios.DxMessaging.Zenject.asmdef +30 -30
  184. package/Runtime/Unity/Integrations/Zenject/WallstopStudios.DxMessaging.Zenject.asmdef.meta +7 -7
  185. package/Runtime/Unity/Integrations/Zenject/ZenjectRegistrationInstaller.cs +79 -1
  186. package/Runtime/Unity/Integrations/Zenject/ZenjectRegistrationInstaller.cs.meta +11 -11
  187. package/Runtime/Unity/Integrations/Zenject.meta +8 -8
  188. package/Runtime/Unity/Integrations.meta +8 -8
  189. package/Runtime/Unity/MessageAwareComponent.cs +29 -0
  190. package/Runtime/Unity/MessageAwareComponent.cs.meta +11 -11
  191. package/Runtime/Unity/MessageBusProviderHandle.cs.meta +12 -12
  192. package/Runtime/Unity/MessagingComponent.cs.meta +11 -11
  193. package/Runtime/Unity/MessagingComponentInstaller.cs.meta +12 -12
  194. package/Runtime/Unity/ScriptableMessageBusProvider.cs.meta +12 -12
  195. package/Runtime/Unity.meta +8 -8
  196. package/Runtime/WallstopStudios.DxMessaging.asmdef +14 -14
  197. package/Runtime/WallstopStudios.DxMessaging.asmdef.meta +7 -7
  198. package/Runtime.meta +8 -8
  199. package/Samples~/DI/Prefabs/MessagingInstallerSample.prefab +98 -98
  200. package/Samples~/DI/Prefabs/MessagingInstallerSample.prefab.meta +7 -7
  201. package/Samples~/DI/Prefabs.meta +8 -8
  202. package/Samples~/DI/Providers/GlobalMessageBusProvider.asset +14 -14
  203. package/Samples~/DI/Providers/GlobalMessageBusProvider.asset.meta +8 -8
  204. package/Samples~/DI/Providers/InitialGlobalMessageBusProvider.asset +14 -14
  205. package/Samples~/DI/Providers/InitialGlobalMessageBusProvider.asset.meta +8 -8
  206. package/Samples~/DI/Providers.meta +8 -8
  207. package/Samples~/DI/README.md +51 -51
  208. package/Samples~/DI/README.md.meta +7 -7
  209. package/Samples~/DI/Reflex/SampleInstaller.cs +7 -0
  210. package/Samples~/DI/Reflex/SampleInstaller.cs.meta +11 -11
  211. package/Samples~/DI/Reflex.meta +8 -8
  212. package/Samples~/DI/VContainer/SampleLifetimeScope.cs +6 -1
  213. package/Samples~/DI/VContainer/SampleLifetimeScope.cs.meta +11 -11
  214. package/Samples~/DI/VContainer.meta +8 -8
  215. package/Samples~/DI/Zenject/SampleInstaller.cs +8 -0
  216. package/Samples~/DI/Zenject/SampleInstaller.cs.meta +11 -11
  217. package/Samples~/DI/Zenject.meta +8 -8
  218. package/Samples~/DI.meta +8 -8
  219. package/Samples~/Mini Combat/Boot.cs.meta +11 -11
  220. package/Samples~/Mini Combat/Enemy.cs.meta +11 -11
  221. package/Samples~/Mini Combat/Messages.cs.meta +11 -11
  222. package/Samples~/Mini Combat/Player.cs.meta +11 -11
  223. package/Samples~/Mini Combat/README.md +324 -323
  224. package/Samples~/Mini Combat/README.md.meta +7 -7
  225. package/Samples~/Mini Combat/UIOverlay.cs.meta +11 -11
  226. package/Samples~/Mini Combat/Walkthrough.md +430 -430
  227. package/Samples~/Mini Combat/Walkthrough.md.meta +7 -7
  228. package/Samples~/Mini Combat/WallstopStudios.DxMessaging.MiniCombat.Sample.asmdef +13 -13
  229. package/Samples~/Mini Combat/WallstopStudios.DxMessaging.MiniCombat.Sample.asmdef.meta +7 -7
  230. package/Samples~/Mini Combat.meta +8 -8
  231. package/Samples~/UI Buttons + Inspector/DiagnosticsEnabler.cs.meta +11 -11
  232. package/Samples~/UI Buttons + Inspector/Messages.cs.meta +11 -11
  233. package/Samples~/UI Buttons + Inspector/MessagingObserver.cs.meta +11 -11
  234. package/Samples~/UI Buttons + Inspector/README.md +210 -209
  235. package/Samples~/UI Buttons + Inspector/README.md.meta +7 -7
  236. package/Samples~/UI Buttons + Inspector/UIButtonEmitter.cs.meta +11 -11
  237. package/Samples~/UI Buttons + Inspector/WallstopStudios.DxMessaging.UIButtons.Sample.asmdef +13 -13
  238. package/Samples~/UI Buttons + Inspector/WallstopStudios.DxMessaging.UIButtons.Sample.asmdef.meta +7 -7
  239. package/Samples~/UI Buttons + Inspector.meta +8 -8
  240. package/SourceGenerators/Directory.Build.props.meta +7 -7
  241. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxAutoConstructorGenerator.cs.meta +11 -11
  242. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxMessageIdGenerator.cs.meta +2 -2
  243. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.csproj.meta +7 -7
  244. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.meta +8 -8
  245. package/SourceGenerators.meta +8 -8
  246. package/Third Party Notices.md +3 -3
  247. package/Third Party Notices.md.meta +7 -7
  248. package/package.json +115 -92
  249. package/package.json.meta +7 -7
@@ -1,11 +1,11 @@
1
- fileFormatVersion: 2
2
- guid: 679059e269c44cda9044da10c5640935
3
- MonoImporter:
4
- externalObjects: {}
5
- serializedVersion: 2
6
- defaultReferences: []
7
- executionOrder: 0
8
- icon: {instanceID: 0}
9
- userData:
10
- assetBundleName:
11
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: 679059e269c44cda9044da10c5640935
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -1,20 +1,20 @@
1
- {
2
- "name": "WallstopStudios.DxMessaging.Reflex",
3
- "rootNamespace": "DxMessaging.Unity.Integrations.Reflex",
4
- "references": ["WallstopStudios.DxMessaging", "Reflex", "Reflex.Unity"],
5
- "includePlatforms": [],
6
- "excludePlatforms": [],
7
- "allowUnsafeCode": false,
8
- "overrideReferences": false,
9
- "precompiledReferences": [],
10
- "autoReferenced": true,
11
- "defineConstraints": ["REFLEX_PRESENT"],
12
- "versionDefines": [
13
- {
14
- "name": "com.gustavopsantos.reflex",
15
- "expression": "0.0.1",
16
- "define": "REFLEX_PRESENT"
17
- }
18
- ],
19
- "noEngineReferences": false
20
- }
1
+ {
2
+ "name": "WallstopStudios.DxMessaging.Reflex",
3
+ "rootNamespace": "DxMessaging.Unity.Integrations.Reflex",
4
+ "references": ["WallstopStudios.DxMessaging", "Reflex", "Reflex.Unity"],
5
+ "includePlatforms": [],
6
+ "excludePlatforms": [],
7
+ "allowUnsafeCode": false,
8
+ "overrideReferences": false,
9
+ "precompiledReferences": [],
10
+ "autoReferenced": true,
11
+ "defineConstraints": ["REFLEX_PRESENT"],
12
+ "versionDefines": [
13
+ {
14
+ "name": "com.gustavopsantos.reflex",
15
+ "expression": "0.0.1",
16
+ "define": "REFLEX_PRESENT"
17
+ }
18
+ ],
19
+ "noEngineReferences": false
20
+ }
@@ -1,7 +1,7 @@
1
- fileFormatVersion: 2
2
- guid: 40c54d5b9b8a421f8bdb5674af90b8db
3
- AssemblyDefinitionImporter:
4
- externalObjects: {}
5
- userData:
6
- assetBundleName:
7
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: 40c54d5b9b8a421f8bdb5674af90b8db
3
+ AssemblyDefinitionImporter:
4
+ externalObjects: {}
5
+ userData:
6
+ assetBundleName:
7
+ assetBundleVariant:
@@ -1,8 +1,8 @@
1
- fileFormatVersion: 2
2
- guid: 1f0fca97d2b2462491078c52ecc0f92a
3
- folderAsset: yes
4
- DefaultImporter:
5
- externalObjects: {}
6
- userData:
7
- assetBundleName:
8
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: 1f0fca97d2b2462491078c52ecc0f92a
3
+ folderAsset: yes
4
+ DefaultImporter:
5
+ externalObjects: {}
6
+ userData:
7
+ assetBundleName:
8
+ assetBundleVariant:
@@ -1,3 +1,3 @@
1
- fileFormatVersion: 2
2
- guid: c26d8cf1c99e45c0a847404d9a455ed1
1
+ fileFormatVersion: 2
2
+ guid: c26d8cf1c99e45c0a847404d9a455ed1
3
3
  timeCreated: 1761517479
@@ -2,22 +2,127 @@
2
2
  namespace DxMessaging.Unity.Integrations.VContainer
3
3
  {
4
4
  #if VCONTAINER_PRESENT
5
+ using System;
5
6
  using global::VContainer;
6
7
  using Core.MessageBus;
8
+ using Core.Pooling;
7
9
 
8
10
  /// <summary>
9
- /// Provides convenience extension methods for wiring <see cref="IMessageRegistrationBuilder"/> inside VContainer scopes.
11
+ /// Provides convenience extension methods for wiring DxMessaging services inside
12
+ /// VContainer scopes. The helper covers the bus registration as well as the
13
+ /// <see cref="IMessageRegistrationBuilder"/> binding so consumers do not have to
14
+ /// drive VContainer reflection-based constructor selection on internal types.
10
15
  /// </summary>
11
16
  public static class VContainerRegistrationExtensions
12
17
  {
18
+ /// <summary>
19
+ /// Registers a <see cref="MessageBus"/> exposed as itself and
20
+ /// <see cref="IMessageBus"/> using an explicit factory backed by the
21
+ /// parameterless <see cref="MessageBus"/> constructor. VContainer's
22
+ /// <c>TypeAnalyzer</c> scans both public and non-public constructors using
23
+ /// <c>BindingFlags.Public | BindingFlags.NonPublic</c>, so the bare
24
+ /// <c>Register&lt;MessageBus&gt;(Lifetime.Singleton).As&lt;IMessageBus&gt;()</c>
25
+ /// pattern would still latch onto a clock-taking private overload whose
26
+ /// <see cref="IDxMessagingClock"/> dependency is not registered. Always prefer this
27
+ /// helper. Calling this helper alongside a bare bus registration raises a
28
+ /// <c>VContainerException</c> at <see cref="IContainerBuilder.Build"/> time.
29
+ /// </summary>
30
+ /// <param name="builder">Container builder receiving the registration.</param>
31
+ /// <param name="lifetime">Lifetime to assign to the registration. Defaults to <see cref="Lifetime.Singleton"/>.</param>
32
+ /// <returns>The underlying registration builder for further chaining.</returns>
33
+ public static RegistrationBuilder RegisterDxMessagingBus(
34
+ this IContainerBuilder builder,
35
+ Lifetime lifetime = Lifetime.Singleton
36
+ )
37
+ {
38
+ if (builder == null)
39
+ {
40
+ throw new ArgumentNullException(nameof(builder));
41
+ }
42
+
43
+ return builder
44
+ .Register<MessageBus>(CreateMessageBus, lifetime)
45
+ .As(typeof(MessageBus), typeof(IMessageBus));
46
+ }
47
+
48
+ /// <summary>
49
+ /// Registers a <see cref="MessageBus"/> exposed as itself and
50
+ /// <see cref="IMessageBus"/> using the supplied factory. Use this overload when
51
+ /// callers need to inject a custom <see cref="IDxMessagingClock"/> (for example a
52
+ /// deterministic test clock) or configure eviction options through
53
+ /// <see cref="MessageBus.CreateForInternalUse"/>.
54
+ /// </summary>
55
+ /// <param name="builder">Container builder receiving the registration.</param>
56
+ /// <param name="factory">Delegate that constructs the <see cref="MessageBus"/> instance using the resolver.</param>
57
+ /// <param name="lifetime">Lifetime to assign to the registration. Defaults to <see cref="Lifetime.Singleton"/>.</param>
58
+ /// <returns>The underlying registration builder for further chaining.</returns>
59
+ public static RegistrationBuilder RegisterDxMessagingBus(
60
+ this IContainerBuilder builder,
61
+ Func<IObjectResolver, MessageBus> factory,
62
+ Lifetime lifetime = Lifetime.Singleton
63
+ )
64
+ {
65
+ if (builder == null)
66
+ {
67
+ throw new ArgumentNullException(nameof(builder));
68
+ }
69
+ if (factory == null)
70
+ {
71
+ throw new ArgumentNullException(nameof(factory));
72
+ }
73
+ return builder
74
+ .Register<MessageBus>(factory, lifetime)
75
+ .As(typeof(MessageBus), typeof(IMessageBus));
76
+ }
77
+
78
+ /// <summary>
79
+ /// Registers a <see cref="MessageBus"/> exposed as itself and
80
+ /// <see cref="IMessageBus"/> using the supplied <see cref="IDxMessagingClock"/>.
81
+ /// Builds the bus through <see cref="MessageBus.CreateForInternalUse"/>, which
82
+ /// is visible to the integration assembly via <c>InternalsVisibleTo</c>.
83
+ /// </summary>
84
+ /// <param name="builder">Container builder receiving the registration.</param>
85
+ /// <param name="clock">Clock implementation injected into the bus. Must not be null.</param>
86
+ /// <param name="lifetime">Lifetime to assign to the registration. Defaults to <see cref="Lifetime.Singleton"/>.</param>
87
+ /// <returns>The underlying registration builder for further chaining.</returns>
88
+ public static RegistrationBuilder RegisterDxMessagingBus(
89
+ this IContainerBuilder builder,
90
+ IDxMessagingClock clock,
91
+ Lifetime lifetime = Lifetime.Singleton
92
+ )
93
+ {
94
+ if (builder == null)
95
+ {
96
+ throw new ArgumentNullException(nameof(builder));
97
+ }
98
+ if (clock == null)
99
+ {
100
+ throw new ArgumentNullException(nameof(clock));
101
+ }
102
+ return builder
103
+ .Register<MessageBus>(_ => MessageBus.CreateForInternalUse(clock), lifetime)
104
+ .As(typeof(MessageBus), typeof(IMessageBus));
105
+ }
106
+
13
107
  /// <summary>
14
108
  /// Registers <see cref="IMessageRegistrationBuilder"/> as a transient service backed by the scoped message bus.
15
109
  /// </summary>
110
+ /// <param name="builder">Container builder receiving the registration.</param>
16
111
  public static void RegisterMessageRegistrationBuilder(this IContainerBuilder builder)
17
112
  {
113
+ if (builder == null)
114
+ {
115
+ throw new ArgumentNullException(nameof(builder));
116
+ }
117
+
18
118
  builder.Register<IMessageRegistrationBuilder>(CreateBuilder, Lifetime.Transient);
19
119
  }
20
120
 
121
+ private static MessageBus CreateMessageBus(IObjectResolver resolver)
122
+ {
123
+ return new MessageBus();
124
+ }
125
+
21
126
  private static IMessageRegistrationBuilder CreateBuilder(IObjectResolver resolver)
22
127
  {
23
128
  if (resolver.TryResolve(out IMessageBusProvider provider))
@@ -28,6 +133,9 @@ namespace DxMessaging.Unity.Integrations.VContainer
28
133
  return new MessageRegistrationBuilder(new ResolverMessageBusProvider(resolver));
29
134
  }
30
135
 
136
+ /// <summary>
137
+ /// Wraps a VContainer <see cref="IObjectResolver"/> as an <see cref="IMessageBusProvider"/>.
138
+ /// </summary>
31
139
  public sealed class ResolverMessageBusProvider : IMessageBusProvider
32
140
  {
33
141
  private readonly IObjectResolver _resolver;
@@ -1,11 +1,11 @@
1
- fileFormatVersion: 2
2
- guid: 494e388075f84aeda9266a0e57f8a05d
3
- MonoImporter:
4
- externalObjects: {}
5
- serializedVersion: 2
6
- defaultReferences: []
7
- executionOrder: 0
8
- icon: {instanceID: 0}
9
- userData:
10
- assetBundleName:
11
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: 494e388075f84aeda9266a0e57f8a05d
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -1,30 +1,30 @@
1
- {
2
- "name": "WallstopStudios.DxMessaging.VContainer",
3
- "rootNamespace": "DxMessaging.Unity.Integrations.VContainer",
4
- "references": ["WallstopStudios.DxMessaging", "VContainer", "VContainer.Unity"],
5
- "includePlatforms": [],
6
- "excludePlatforms": [],
7
- "allowUnsafeCode": false,
8
- "overrideReferences": false,
9
- "precompiledReferences": [],
10
- "autoReferenced": true,
11
- "defineConstraints": ["VCONTAINER_PRESENT"],
12
- "versionDefines": [
13
- {
14
- "name": "jp.cysharp.vcontainer",
15
- "expression": "0.0.1",
16
- "define": "VCONTAINER_PRESENT"
17
- },
18
- {
19
- "name": "jp.hadashikick.vcontainer",
20
- "expression": "0.0.1",
21
- "define": "VCONTAINER_PRESENT"
22
- },
23
- {
24
- "name": "VContainer",
25
- "expression": "0.0.1",
26
- "define": "VCONTAINER_PRESENT"
27
- }
28
- ],
29
- "noEngineReferences": false
30
- }
1
+ {
2
+ "name": "WallstopStudios.DxMessaging.VContainer",
3
+ "rootNamespace": "DxMessaging.Unity.Integrations.VContainer",
4
+ "references": ["WallstopStudios.DxMessaging", "VContainer", "VContainer.Unity"],
5
+ "includePlatforms": [],
6
+ "excludePlatforms": [],
7
+ "allowUnsafeCode": false,
8
+ "overrideReferences": false,
9
+ "precompiledReferences": [],
10
+ "autoReferenced": true,
11
+ "defineConstraints": ["VCONTAINER_PRESENT"],
12
+ "versionDefines": [
13
+ {
14
+ "name": "jp.cysharp.vcontainer",
15
+ "expression": "0.0.1",
16
+ "define": "VCONTAINER_PRESENT"
17
+ },
18
+ {
19
+ "name": "jp.hadashikick.vcontainer",
20
+ "expression": "0.0.1",
21
+ "define": "VCONTAINER_PRESENT"
22
+ },
23
+ {
24
+ "name": "VContainer",
25
+ "expression": "0.0.1",
26
+ "define": "VCONTAINER_PRESENT"
27
+ }
28
+ ],
29
+ "noEngineReferences": false
30
+ }
@@ -1,7 +1,7 @@
1
- fileFormatVersion: 2
2
- guid: 2583d1d4ebd847faba751e3be6bf5b20
3
- AssemblyDefinitionImporter:
4
- externalObjects: {}
5
- userData:
6
- assetBundleName:
7
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: 2583d1d4ebd847faba751e3be6bf5b20
3
+ AssemblyDefinitionImporter:
4
+ externalObjects: {}
5
+ userData:
6
+ assetBundleName:
7
+ assetBundleVariant:
@@ -1,8 +1,8 @@
1
- fileFormatVersion: 2
2
- guid: 4d890fb7cb4f49e18fd9fbac12d5040c
3
- folderAsset: yes
4
- DefaultImporter:
5
- externalObjects: {}
6
- userData:
7
- assetBundleName:
8
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: 4d890fb7cb4f49e18fd9fbac12d5040c
3
+ folderAsset: yes
4
+ DefaultImporter:
5
+ externalObjects: {}
6
+ userData:
7
+ assetBundleName:
8
+ assetBundleVariant:
@@ -1,3 +1,3 @@
1
- fileFormatVersion: 2
2
- guid: ec21f9c7970043fe88177114708ef79e
1
+ fileFormatVersion: 2
2
+ guid: ec21f9c7970043fe88177114708ef79e
3
3
  timeCreated: 1761517466
@@ -1,30 +1,30 @@
1
- {
2
- "name": "WallstopStudios.DxMessaging.Zenject",
3
- "rootNamespace": "DxMessaging.Unity.Integrations.Zenject",
4
- "references": ["WallstopStudios.DxMessaging", "Zenject"],
5
- "includePlatforms": [],
6
- "excludePlatforms": [],
7
- "allowUnsafeCode": false,
8
- "overrideReferences": false,
9
- "precompiledReferences": [],
10
- "autoReferenced": true,
11
- "defineConstraints": ["ZENJECT_PRESENT"],
12
- "versionDefines": [
13
- {
14
- "name": "com.extenject.zenject",
15
- "expression": "0.0.1",
16
- "define": "ZENJECT_PRESENT"
17
- },
18
- {
19
- "name": "com.modesttree.zenject",
20
- "expression": "0.0.1",
21
- "define": "ZENJECT_PRESENT"
22
- },
23
- {
24
- "name": "com.svermeulen.extenject",
25
- "expression": "0.0.1",
26
- "define": "ZENJECT_PRESENT"
27
- }
28
- ],
29
- "noEngineReferences": false
30
- }
1
+ {
2
+ "name": "WallstopStudios.DxMessaging.Zenject",
3
+ "rootNamespace": "DxMessaging.Unity.Integrations.Zenject",
4
+ "references": ["WallstopStudios.DxMessaging", "Zenject"],
5
+ "includePlatforms": [],
6
+ "excludePlatforms": [],
7
+ "allowUnsafeCode": false,
8
+ "overrideReferences": false,
9
+ "precompiledReferences": [],
10
+ "autoReferenced": true,
11
+ "defineConstraints": ["ZENJECT_PRESENT"],
12
+ "versionDefines": [
13
+ {
14
+ "name": "com.extenject.zenject",
15
+ "expression": "0.0.1",
16
+ "define": "ZENJECT_PRESENT"
17
+ },
18
+ {
19
+ "name": "com.modesttree.zenject",
20
+ "expression": "0.0.1",
21
+ "define": "ZENJECT_PRESENT"
22
+ },
23
+ {
24
+ "name": "com.svermeulen.extenject",
25
+ "expression": "0.0.1",
26
+ "define": "ZENJECT_PRESENT"
27
+ }
28
+ ],
29
+ "noEngineReferences": false
30
+ }
@@ -1,7 +1,7 @@
1
- fileFormatVersion: 2
2
- guid: 5c2f6b45062a4c07a599dd8bcbac2bb4
3
- AssemblyDefinitionImporter:
4
- externalObjects: {}
5
- userData:
6
- assetBundleName:
7
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: 5c2f6b45062a4c07a599dd8bcbac2bb4
3
+ AssemblyDefinitionImporter:
4
+ externalObjects: {}
5
+ userData:
6
+ assetBundleName:
7
+ assetBundleVariant:
@@ -2,8 +2,10 @@
2
2
  namespace DxMessaging.Unity.Integrations.Zenject
3
3
  {
4
4
  #if ZENJECT_PRESENT
5
- using global::Zenject;
5
+ using System;
6
6
  using Core.MessageBus;
7
+ using Core.Pooling;
8
+ using global::Zenject;
7
9
 
8
10
  /// <summary>
9
11
  /// Optional installer that exposes <see cref="IMessageRegistrationBuilder"/> using the scoped Zenject container.
@@ -64,6 +66,82 @@ namespace DxMessaging.Unity.Integrations.Zenject
64
66
  }
65
67
  }
66
68
  }
69
+
70
+ /// <summary>
71
+ /// Provides convenience helpers for wiring a <see cref="MessageBus"/> into Zenject containers.
72
+ /// Zenject's <c>BindInterfacesAndSelfTo</c> defaults to selecting the public parameterless
73
+ /// constructor, so today the bare <c>Container.BindInterfacesAndSelfTo&lt;MessageBus&gt;().AsSingle()</c>
74
+ /// pattern resolves correctly. Behaviour is version-sensitive: future Zenject releases that
75
+ /// broaden constructor scanning could pick a non-public clock-taking overload whose
76
+ /// dependency is not registered, mirroring the VContainer failure mode -- always prefer the
77
+ /// helper below for clarity and forward compatibility. Calling this helper alongside an
78
+ /// existing bare bind raises a Zenject binding-conflict exception when the container is
79
+ /// validated.
80
+ /// </summary>
81
+ public static class ZenjectRegistrationExtensions
82
+ {
83
+ /// <summary>
84
+ /// Binds a singleton <see cref="MessageBus"/> exposed as <see cref="IMessageBus"/> using
85
+ /// an explicit method, sidestepping reflection-based constructor selection.
86
+ /// </summary>
87
+ /// <param name="container">Container receiving the registration.</param>
88
+ public static void BindDxMessagingBus(this DiContainer container)
89
+ {
90
+ if (container == null)
91
+ {
92
+ throw new ArgumentNullException(nameof(container));
93
+ }
94
+ container
95
+ .BindInterfacesAndSelfTo<MessageBus>()
96
+ .FromMethod(_ => new MessageBus())
97
+ .AsSingle();
98
+ }
99
+
100
+ /// <summary>
101
+ /// Binds a singleton <see cref="MessageBus"/> exposed as <see cref="IMessageBus"/> using
102
+ /// the supplied factory. Allows callers to inject a custom <see cref="IDxMessagingClock"/>
103
+ /// via <see cref="MessageBus.CreateForInternalUse"/>.
104
+ /// </summary>
105
+ /// <param name="container">Container receiving the registration.</param>
106
+ /// <param name="factory">Delegate that constructs the <see cref="MessageBus"/> instance using the inject context.</param>
107
+ public static void BindDxMessagingBus(
108
+ this DiContainer container,
109
+ Func<InjectContext, MessageBus> factory
110
+ )
111
+ {
112
+ if (container == null)
113
+ {
114
+ throw new ArgumentNullException(nameof(container));
115
+ }
116
+ if (factory == null)
117
+ {
118
+ throw new ArgumentNullException(nameof(factory));
119
+ }
120
+ container.BindInterfacesAndSelfTo<MessageBus>().FromMethod(factory).AsSingle();
121
+ }
122
+
123
+ /// <summary>
124
+ /// Binds a singleton <see cref="MessageBus"/> exposed as <see cref="IMessageBus"/> using
125
+ /// the supplied <see cref="IDxMessagingClock"/>.
126
+ /// </summary>
127
+ /// <param name="container">Container receiving the registration.</param>
128
+ /// <param name="clock">Clock implementation injected into the bus. Must not be null.</param>
129
+ public static void BindDxMessagingBus(this DiContainer container, IDxMessagingClock clock)
130
+ {
131
+ if (container == null)
132
+ {
133
+ throw new ArgumentNullException(nameof(container));
134
+ }
135
+ if (clock == null)
136
+ {
137
+ throw new ArgumentNullException(nameof(clock));
138
+ }
139
+ container
140
+ .BindInterfacesAndSelfTo<MessageBus>()
141
+ .FromMethod(_ => MessageBus.CreateForInternalUse(clock))
142
+ .AsSingle();
143
+ }
144
+ }
67
145
  #endif
68
146
  }
69
147
  #endif
@@ -1,11 +1,11 @@
1
- fileFormatVersion: 2
2
- guid: 1f5d2f7d6c9b4bb9bb5d9ce1f2e4763c
3
- MonoImporter:
4
- externalObjects: {}
5
- serializedVersion: 2
6
- defaultReferences: []
7
- executionOrder: 0
8
- icon: {instanceID: 0}
9
- userData:
10
- assetBundleName:
11
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: 1f5d2f7d6c9b4bb9bb5d9ce1f2e4763c
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -1,8 +1,8 @@
1
- fileFormatVersion: 2
2
- guid: 6f2c8f2b1b0b4f618d4f2711d8f6ac2b
3
- folderAsset: yes
4
- DefaultImporter:
5
- externalObjects: {}
6
- userData:
7
- assetBundleName:
8
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: 6f2c8f2b1b0b4f618d4f2711d8f6ac2b
3
+ folderAsset: yes
4
+ DefaultImporter:
5
+ externalObjects: {}
6
+ userData:
7
+ assetBundleName:
8
+ assetBundleVariant:
@@ -1,8 +1,8 @@
1
- fileFormatVersion: 2
2
- guid: d4cc934a94a46b849bd0ce328eba12be
3
- folderAsset: yes
4
- DefaultImporter:
5
- externalObjects: {}
6
- userData:
7
- assetBundleName:
8
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: d4cc934a94a46b849bd0ce328eba12be
3
+ folderAsset: yes
4
+ DefaultImporter:
5
+ externalObjects: {}
6
+ userData:
7
+ assetBundleName:
8
+ assetBundleVariant:
@@ -1,6 +1,7 @@
1
1
  #if UNITY_2021_3_OR_NEWER
2
2
  namespace DxMessaging.Unity
3
3
  {
4
+ using System;
4
5
  using Core;
5
6
  using Core.MessageBus;
6
7
  using Core.Messages;
@@ -71,6 +72,15 @@ namespace DxMessaging.Unity
71
72
  protected IMessageBusProvider _configuredMessageBusProvider;
72
73
  protected MessageBusProviderHandle _configuredMessageBusProviderHandle;
73
74
 
75
+ #if UNITY_EDITOR || DEBUG
76
+ // G6: latch the OnEnable self-check log to fire at most once per component instance.
77
+ // [NonSerialized] keeps the latch from being saved into the scene; every fresh
78
+ // instance starts with the latch clear and gets at most one breadcrumb if it really is
79
+ // missing the base.Awake() call.
80
+ [NonSerialized]
81
+ private bool _selfCheckLogged;
82
+ #endif
83
+
74
84
  /// <summary>
75
85
  /// Creates the <see cref="MessagingComponent"/>, token, and calls <see cref="RegisterMessageHandlers"/>.
76
86
  /// </summary>
@@ -135,6 +145,25 @@ namespace DxMessaging.Unity
135
145
  {
136
146
  _messageRegistrationToken?.Enable();
137
147
  }
148
+ #if UNITY_EDITOR || DEBUG
149
+ // G6: belt-and-braces self-check. If we got here without a registration token, the
150
+ // most common cause is a subclass that overrode Awake without calling base.Awake();
151
+ // the analyzer DXMSG006 catches this at compile time but only if the project loads
152
+ // the analyzer DLL (e.g. user has disabled analyzers, opened the project on a Unity
153
+ // version that does not load the DLL, or the analyzer suppressed via attribute /
154
+ // ignore list). We surface a one-time-per-instance LogError so the failure mode is
155
+ // not silent. Gated on UNITY_EDITOR || DEBUG so release builds pay zero cost.
156
+ if (_messageRegistrationToken == null && !_selfCheckLogged)
157
+ {
158
+ _selfCheckLogged = true;
159
+ Debug.LogError(
160
+ $"[DxMessaging] {GetType().Name} appears to be missing a base.Awake() call; "
161
+ + "no registration token exists, so this component will not receive messages. "
162
+ + "See https://github.com/wallstop/DxMessaging/blob/master/docs/reference/analyzers.md#dxmsg006-missing-base-call",
163
+ this
164
+ );
165
+ }
166
+ #endif
138
167
  }
139
168
 
140
169
  /// <summary>