com.wallstop-studios.dxmessaging 2.0.0 → 2.1.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.
- package/.github/workflows/format-on-demand.yml +2 -2
- package/.github/workflows/json-format-check.yml +1 -1
- package/.github/workflows/markdown-json.yml +1 -1
- package/.github/workflows/markdownlint.yml +1 -1
- package/.github/workflows/npm-publish.yml +1 -1
- package/.github/workflows/prettier-autofix.yml +2 -2
- package/.github/workflows/yaml-format-lint.yml +1 -1
- package/Docs/Advanced.md +26 -1
- package/Docs/Comparisons.md +1229 -146
- package/Docs/Compatibility.md +27 -0
- package/Docs/DesignAndArchitecture.md +41 -34
- package/Docs/EmitShorthands.md +34 -0
- package/Docs/Helpers.md +91 -76
- package/Docs/Index.md +28 -25
- package/Docs/Install.md +29 -6
- package/Docs/Integrations/Reflex.md +292 -0
- package/{package-lock.json.meta → Docs/Integrations/Reflex.md.meta} +1 -1
- package/Docs/Integrations/VContainer.md +324 -0
- package/Docs/Integrations/VContainer.md.meta +7 -0
- package/Docs/Integrations/Zenject.md +333 -0
- package/Docs/Integrations/Zenject.md.meta +7 -0
- package/{Editor/Analyzers/WallstopStudios.DxMessaging.SourceGenerators.pdb.meta → Docs/Integrations.meta} +2 -1
- package/Docs/InterceptorsAndOrdering.md +371 -17
- package/Docs/ListeningPatterns.md +206 -0
- package/Docs/MessageBusProviders.md +496 -0
- package/Docs/MessageBusProviders.md.meta +7 -0
- package/Docs/MessageTypes.md +27 -0
- package/Docs/MigrationGuide.md +45 -0
- package/Docs/Patterns.md +286 -0
- package/Docs/Performance.md +9 -9
- package/Docs/QuickReference.md +31 -0
- package/Docs/QuickStart.md +1 -2
- package/Docs/RuntimeConfiguration.md +407 -0
- package/Docs/RuntimeConfiguration.md.meta +7 -0
- package/Docs/UnityIntegration.md +3 -1
- package/Docs/VisualGuide.md +206 -157
- package/Editor/CustomEditors/MessagingComponentEditor.cs +15 -6
- package/README.md +148 -26
- package/Runtime/AssemblyInfo.cs +4 -0
- package/Runtime/Core/Attributes/DxAutoConstructorAttribute.cs +1 -1
- package/Runtime/Core/Attributes/DxBroadcastMessageAttribute.cs +1 -1
- package/Runtime/Core/Attributes/DxOptionalParameterAttribute.cs +1 -1
- package/Runtime/Core/Attributes/DxTargetedMessageAttribute.cs +1 -1
- package/Runtime/Core/Attributes/DxUntargetedMessageAttribute.cs +1 -1
- package/Runtime/Core/Extensions/MessageBusExtensions.cs +253 -0
- package/Runtime/Core/Extensions/MessageBusExtensions.cs.meta +12 -0
- package/Runtime/Core/Extensions/MessageExtensions.cs +137 -89
- package/Runtime/Core/MessageBus/GlobalMessageBusProvider.cs +23 -0
- package/Runtime/Core/MessageBus/GlobalMessageBusProvider.cs.meta +11 -0
- package/Runtime/Core/MessageBus/IMessageBusProvider.cs +14 -0
- package/Runtime/Core/MessageBus/IMessageBusProvider.cs.meta +11 -0
- package/Runtime/Core/MessageBus/IMessageRegistrationBuilder.cs +18 -0
- package/Runtime/Core/MessageBus/IMessageRegistrationBuilder.cs.meta +11 -0
- package/Runtime/Core/MessageBus/MessageBusRebindMode.cs +26 -0
- package/Runtime/Core/MessageBus/MessageBusRebindMode.cs.meta +11 -0
- package/Runtime/Core/MessageBus/MessageRegistrationBuilder.cs +383 -0
- package/Runtime/Core/MessageBus/MessageRegistrationBuilder.cs.meta +11 -0
- package/Runtime/Core/MessageHandler.cs +198 -27
- package/Runtime/Core/MessageRegistrationToken.cs +67 -25
- package/Runtime/Core/Messages/IBroadcastMessage.cs +1 -1
- package/Runtime/Core/Messages/ITargetedMessage.cs +1 -1
- package/Runtime/Core/Messages/IUntargetedMessage.cs +1 -1
- package/Runtime/Unity/CurrentGlobalMessageBusProvider.cs +31 -0
- package/Runtime/Unity/CurrentGlobalMessageBusProvider.cs.meta +12 -0
- package/Runtime/Unity/InitialGlobalMessageBusProvider.cs +38 -0
- package/Runtime/Unity/InitialGlobalMessageBusProvider.cs.meta +12 -0
- package/Runtime/Unity/Integrations/Reflex/AssemblyInfo.cs +11 -0
- package/Runtime/Unity/Integrations/Reflex/AssemblyInfo.cs.meta +3 -0
- package/Runtime/Unity/Integrations/Reflex/ReflexRegistrationInstaller.cs +73 -0
- package/Runtime/Unity/Integrations/Reflex/ReflexRegistrationInstaller.cs.meta +11 -0
- package/Runtime/Unity/Integrations/Reflex/WallstopStudios.DxMessaging.Reflex.asmdef +20 -0
- package/Runtime/Unity/Integrations/Reflex/WallstopStudios.DxMessaging.Reflex.asmdef.meta +7 -0
- package/Runtime/Unity/Integrations/Reflex.meta +8 -0
- package/Runtime/Unity/Integrations/VContainer/AssemblyInfo.cs +11 -0
- package/Runtime/Unity/Integrations/VContainer/AssemblyInfo.cs.meta +3 -0
- package/Runtime/Unity/Integrations/VContainer/VContainerRegistrationExtensions.cs +46 -0
- package/Runtime/Unity/Integrations/VContainer/VContainerRegistrationExtensions.cs.meta +11 -0
- package/Runtime/Unity/Integrations/VContainer/WallstopStudios.DxMessaging.VContainer.asmdef +30 -0
- package/Runtime/Unity/Integrations/VContainer/WallstopStudios.DxMessaging.VContainer.asmdef.meta +7 -0
- package/Runtime/Unity/Integrations/VContainer.meta +8 -0
- package/Runtime/Unity/Integrations/Zenject/AssemblyInfo.cs +11 -0
- package/Runtime/Unity/Integrations/Zenject/AssemblyInfo.cs.meta +3 -0
- package/Runtime/Unity/Integrations/Zenject/WallstopStudios.DxMessaging.Zenject.asmdef +30 -0
- package/Runtime/Unity/Integrations/Zenject/WallstopStudios.DxMessaging.Zenject.asmdef.meta +7 -0
- package/Runtime/Unity/Integrations/Zenject/ZenjectRegistrationInstaller.cs +55 -0
- package/Runtime/Unity/Integrations/Zenject/ZenjectRegistrationInstaller.cs.meta +11 -0
- package/Runtime/Unity/Integrations/Zenject.meta +8 -0
- package/Runtime/Unity/Integrations.meta +8 -0
- package/Runtime/Unity/MessageAwareComponent.cs +102 -0
- package/Runtime/Unity/MessageBusProviderHandle.cs +97 -0
- package/Runtime/Unity/MessageBusProviderHandle.cs.meta +12 -0
- package/Runtime/Unity/MessagingComponent.cs +175 -9
- package/Runtime/Unity/MessagingComponentInstaller.cs +120 -0
- package/Runtime/Unity/MessagingComponentInstaller.cs.meta +12 -0
- package/Runtime/Unity/ScriptableMessageBusProvider.cs +14 -0
- package/Runtime/Unity/ScriptableMessageBusProvider.cs.meta +12 -0
- package/Samples~/DI/Prefabs/MessagingInstallerSample.prefab +98 -0
- package/Samples~/DI/Prefabs/MessagingInstallerSample.prefab.meta +7 -0
- package/Samples~/DI/Prefabs.meta +8 -0
- package/Samples~/DI/Providers/GlobalMessageBusProvider.asset +14 -0
- package/Samples~/DI/Providers/GlobalMessageBusProvider.asset.meta +8 -0
- package/Samples~/DI/Providers/InitialGlobalMessageBusProvider.asset +14 -0
- package/Samples~/DI/Providers/InitialGlobalMessageBusProvider.asset.meta +8 -0
- package/Samples~/DI/Providers.meta +8 -0
- package/Samples~/DI/README.md +51 -0
- package/Samples~/DI/README.md.meta +7 -0
- package/Samples~/DI/Reflex/SampleInstaller.cs +75 -0
- package/Samples~/DI/Reflex/SampleInstaller.cs.meta +11 -0
- package/Samples~/DI/Reflex.meta +8 -0
- package/Samples~/DI/VContainer/SampleLifetimeScope.cs +79 -0
- package/Samples~/DI/VContainer/SampleLifetimeScope.cs.meta +11 -0
- package/Samples~/DI/VContainer.meta +8 -0
- package/Samples~/DI/Zenject/SampleInstaller.cs +65 -0
- package/Samples~/DI/Zenject/SampleInstaller.cs.meta +11 -0
- package/Samples~/DI/Zenject.meta +8 -0
- package/Samples~/DI.meta +8 -0
- package/Samples~/Mini Combat/README.md +5 -7
- package/Samples~/Mini Combat/Walkthrough.md +18 -24
- package/Samples~/UI Buttons + Inspector/DiagnosticsEnabler.cs +12 -2
- package/Samples~/UI Buttons + Inspector/README.md.meta +7 -0
- package/Tests/Runtime/Benchmarks/BenchmarkSession.cs +444 -0
- package/Tests/Runtime/Benchmarks/BenchmarkSession.cs.meta +11 -0
- package/Tests/Runtime/Benchmarks/BenchmarkTestBase.cs +94 -0
- package/Tests/Runtime/Benchmarks/BenchmarkTestBase.cs.meta +11 -0
- package/Tests/Runtime/Benchmarks/ComparisonPerformanceTests.cs +395 -0
- package/Tests/Runtime/Benchmarks/ComparisonPerformanceTests.cs.meta +11 -0
- package/Tests/Runtime/Benchmarks/PerformanceTests.cs +77 -429
- package/Tests/Runtime/Benchmarks/ProviderResolutionBenchmarks.cs +142 -0
- package/Tests/Runtime/Benchmarks/ProviderResolutionBenchmarks.cs.meta +12 -0
- package/Tests/Runtime/Benchmarks/WallstopStudios.DxMessaging.Tests.Runtime.Benchmarks.asmdef +50 -0
- package/Tests/Runtime/Benchmarks/WallstopStudios.DxMessaging.Tests.Runtime.Benchmarks.asmdef.meta +7 -0
- package/Tests/Runtime/Core/DefaultBusFallbackTests.cs +333 -0
- package/Tests/Runtime/Core/DefaultBusFallbackTests.cs.meta +11 -0
- package/Tests/Runtime/Core/Extensions/MessageBusExtensionsTests.cs +278 -0
- package/Tests/Runtime/Core/Extensions/MessageBusExtensionsTests.cs.meta +11 -0
- package/Tests/Runtime/Core/Extensions/MessageExtensionsProviderTests.cs +289 -0
- package/Tests/Runtime/Core/Extensions/MessageExtensionsProviderTests.cs.meta +11 -0
- package/Tests/Runtime/Core/Extensions.meta +8 -0
- package/Tests/Runtime/Core/IntegrationShimSmokeTests.cs +57 -0
- package/Tests/Runtime/Core/IntegrationShimSmokeTests.cs.meta +11 -0
- package/Tests/Runtime/Core/MessageHandlerGlobalBusTests.cs +219 -0
- package/Tests/Runtime/Core/MessageHandlerGlobalBusTests.cs.meta +11 -0
- package/Tests/Runtime/Core/MessageRegistrationBuilderTests.cs +204 -0
- package/Tests/Runtime/Core/MessageRegistrationBuilderTests.cs.meta +11 -0
- package/Tests/Runtime/Core/MessagingTestBase.cs +4 -4
- package/Tests/Runtime/Core/NominalTests.cs +2 -2
- package/Tests/Runtime/Core/TypedShorthandTests.cs +2 -2
- package/Tests/Runtime/Core/UntargetedEquivalenceTests.cs +1 -1
- package/Tests/Runtime/Core/UntargetedPrefreezeTests.cs +2 -4
- package/Tests/Runtime/Integrations/Reflex/ReflexIntegrationTests.cs +162 -0
- package/Tests/Runtime/Integrations/Reflex/ReflexIntegrationTests.cs.meta +11 -0
- package/Tests/Runtime/Integrations/Reflex/Resources/ReflexSettings.asset +16 -0
- package/Tests/Runtime/Integrations/Reflex/Resources/ReflexSettings.asset.meta +8 -0
- package/Tests/Runtime/Integrations/Reflex/Resources.meta +8 -0
- package/Tests/Runtime/Integrations/Reflex/WallstopStudios.DxMessaging.Tests.Runtime.Reflex.asmdef +27 -0
- package/Tests/Runtime/Integrations/Reflex/WallstopStudios.DxMessaging.Tests.Runtime.Reflex.asmdef.meta +7 -0
- package/Tests/Runtime/Integrations/Reflex.meta +8 -0
- package/Tests/Runtime/Integrations/VContainer/VContainerIntegrationTests.cs +140 -0
- package/Tests/Runtime/Integrations/VContainer/VContainerIntegrationTests.cs.meta +11 -0
- package/Tests/Runtime/Integrations/VContainer/WallstopStudios.DxMessaging.Tests.Runtime.VContainer.asmdef +37 -0
- package/Tests/Runtime/Integrations/VContainer/WallstopStudios.DxMessaging.Tests.Runtime.VContainer.asmdef.meta +7 -0
- package/Tests/Runtime/Integrations/VContainer.meta +8 -0
- package/Tests/Runtime/Integrations/Zenject/WallstopStudios.DxMessaging.Tests.Runtime.Zenject.asmdef +37 -0
- package/Tests/Runtime/Integrations/Zenject/WallstopStudios.DxMessaging.Tests.Runtime.Zenject.asmdef.meta +7 -0
- package/Tests/Runtime/Integrations/Zenject/ZenjectIntegrationTests.cs +140 -0
- package/Tests/Runtime/Integrations/Zenject/ZenjectIntegrationTests.cs.meta +11 -0
- package/Tests/Runtime/Integrations/Zenject.meta +8 -0
- package/Tests/Runtime/Integrations.meta +8 -0
- package/Tests/Runtime/Scripts/Components/EmptyMessageAwareComponent.cs +1 -1
- package/Tests/Runtime/Scripts/Components/GenericMessageAwareComponent.cs +1 -1
- package/Tests/Runtime/Scripts/Components/SimpleMessageAwareComponent.cs +1 -1
- package/Tests/Runtime/TestUtilities/UnityFixtureBase.cs +64 -0
- package/Tests/Runtime/TestUtilities/UnityFixtureBase.cs.meta +12 -0
- package/Tests/Runtime/TestUtilities.meta +9 -0
- package/Tests/Runtime/Unity/MessageBusProviderAssetTests.cs +57 -0
- package/Tests/Runtime/Unity/MessageBusProviderAssetTests.cs.meta +11 -0
- package/Tests/Runtime/Unity/MessageBusProviderHandleTests.cs +107 -0
- package/Tests/Runtime/Unity/MessageBusProviderHandleTests.cs.meta +12 -0
- package/Tests/Runtime/Unity/MessagingComponentProviderIntegrationTests.cs +210 -0
- package/Tests/Runtime/Unity/MessagingComponentProviderIntegrationTests.cs.meta +12 -0
- package/Tests/Runtime/Unity.meta +9 -0
- package/Tests/Runtime/WallstopStudios.DxMessaging.Tests.Runtime.asmdef +3 -1
- package/package.json +1 -1
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
namespace DxMessaging.Tests.Runtime.Reflex
|
|
2
|
+
{
|
|
3
|
+
#if REFLEX_PRESENT
|
|
4
|
+
using DxMessaging.Core;
|
|
5
|
+
using DxMessaging.Core.Extensions;
|
|
6
|
+
using DxMessaging.Core.MessageBus;
|
|
7
|
+
using DxMessaging.Tests.Runtime;
|
|
8
|
+
using DxMessaging.Tests.Runtime.Scripts.Messages;
|
|
9
|
+
using DxMessaging.Unity;
|
|
10
|
+
using DxMessaging.Unity.Integrations.Reflex;
|
|
11
|
+
using global::Reflex.Core;
|
|
12
|
+
using global::Reflex.Injectors;
|
|
13
|
+
using NUnit.Framework;
|
|
14
|
+
using UnityEngine;
|
|
15
|
+
|
|
16
|
+
public sealed class ReflexIntegrationTests : UnityFixtureBase
|
|
17
|
+
{
|
|
18
|
+
[Test]
|
|
19
|
+
public void InstallerRegistersMessageBusAndConfiguratorAppliesIt()
|
|
20
|
+
{
|
|
21
|
+
ContainerBuilder builder = new();
|
|
22
|
+
DxMessagingInstaller installer = new();
|
|
23
|
+
installer.InstallBindings(builder);
|
|
24
|
+
|
|
25
|
+
Container container = TrackDisposable(builder.Build());
|
|
26
|
+
IMessageBus bus = container.Resolve<IMessageBus>();
|
|
27
|
+
Assert.NotNull(bus, "Reflex installer should bind IMessageBus.");
|
|
28
|
+
|
|
29
|
+
GameObject go = Track(
|
|
30
|
+
new GameObject(
|
|
31
|
+
nameof(InstallerRegistersMessageBusAndConfiguratorAppliesIt),
|
|
32
|
+
typeof(MessagingComponent),
|
|
33
|
+
typeof(ReflexConfiguredListener)
|
|
34
|
+
)
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
ReflexConfiguredListener listener = go.GetComponent<ReflexConfiguredListener>();
|
|
38
|
+
AttributeInjector.Inject(listener, container);
|
|
39
|
+
listener.Initialize(bus);
|
|
40
|
+
|
|
41
|
+
SimpleUntargetedMessage message = new();
|
|
42
|
+
message.EmitUntargeted(bus);
|
|
43
|
+
|
|
44
|
+
Assert.AreEqual(
|
|
45
|
+
1,
|
|
46
|
+
listener.ReceivedCount,
|
|
47
|
+
"Listener should observe messages emitted through the Reflex container's bus."
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
[Test]
|
|
52
|
+
public void RegistrationInstallerBindsBuilderAgainstContainerBus()
|
|
53
|
+
{
|
|
54
|
+
ContainerBuilder builder = new();
|
|
55
|
+
DxMessagingInstaller coreInstaller = new();
|
|
56
|
+
coreInstaller.InstallBindings(builder);
|
|
57
|
+
|
|
58
|
+
builder.AddSingleton(
|
|
59
|
+
typeof(StaticMessageBusProvider),
|
|
60
|
+
typeof(StaticMessageBusProvider),
|
|
61
|
+
typeof(IMessageBusProvider)
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
DxMessagingRegistrationInstaller registrationInstaller = new();
|
|
65
|
+
registrationInstaller.InstallBindings(builder);
|
|
66
|
+
|
|
67
|
+
Container container = TrackDisposable(builder.Build());
|
|
68
|
+
|
|
69
|
+
StaticMessageBusProvider provider = container.Resolve<StaticMessageBusProvider>();
|
|
70
|
+
|
|
71
|
+
IMessageRegistrationBuilder registrationBuilder =
|
|
72
|
+
container.Resolve<IMessageRegistrationBuilder>();
|
|
73
|
+
using MessageRegistrationLease lease = registrationBuilder.Build(
|
|
74
|
+
new MessageRegistrationBuildOptions()
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
Assert.AreSame(
|
|
78
|
+
provider.Bus,
|
|
79
|
+
lease.MessageBus,
|
|
80
|
+
"Reflex registration installer should prefer the registered IMessageBusProvider."
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
[Test]
|
|
85
|
+
public void RegistrationInstallerExposesConcreteBuilder()
|
|
86
|
+
{
|
|
87
|
+
ContainerBuilder builder = new();
|
|
88
|
+
DxMessagingInstaller coreInstaller = new();
|
|
89
|
+
coreInstaller.InstallBindings(builder);
|
|
90
|
+
|
|
91
|
+
DxMessagingRegistrationInstaller registrationInstaller = new();
|
|
92
|
+
registrationInstaller.InstallBindings(builder);
|
|
93
|
+
|
|
94
|
+
Container container = TrackDisposable(builder.Build());
|
|
95
|
+
|
|
96
|
+
var concrete =
|
|
97
|
+
container.Resolve<DxMessagingRegistrationInstaller.ContainerMessageRegistrationBuilder>();
|
|
98
|
+
Assert.IsNotNull(
|
|
99
|
+
concrete,
|
|
100
|
+
"Container should resolve the concrete registration builder type."
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
IMessageRegistrationBuilder builderInterface =
|
|
104
|
+
container.Resolve<IMessageRegistrationBuilder>();
|
|
105
|
+
Assert.IsTrue(
|
|
106
|
+
ReferenceEquals(concrete, builderInterface),
|
|
107
|
+
"Container should return the same instance for concrete and interface resolutions."
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
private sealed class DxMessagingInstaller : IInstaller
|
|
112
|
+
{
|
|
113
|
+
public void InstallBindings(ContainerBuilder containerBuilder)
|
|
114
|
+
{
|
|
115
|
+
containerBuilder.AddSingleton(
|
|
116
|
+
typeof(MessageBus),
|
|
117
|
+
typeof(MessageBus),
|
|
118
|
+
typeof(IMessageBus)
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
private sealed class ReflexConfiguredListener : MonoBehaviour
|
|
124
|
+
{
|
|
125
|
+
private IMessageBus _messageBus;
|
|
126
|
+
private MessageRegistrationToken _token;
|
|
127
|
+
|
|
128
|
+
internal int ReceivedCount { get; private set; }
|
|
129
|
+
|
|
130
|
+
internal void Initialize(IMessageBus messageBus)
|
|
131
|
+
{
|
|
132
|
+
_messageBus = messageBus;
|
|
133
|
+
MessagingComponent messagingComponent = GetComponent<MessagingComponent>();
|
|
134
|
+
messagingComponent.Configure(_messageBus, MessageBusRebindMode.RebindActive);
|
|
135
|
+
|
|
136
|
+
_token = messagingComponent.Create(this);
|
|
137
|
+
_ = _token.RegisterUntargeted<SimpleUntargetedMessage>(_ => ++ReceivedCount);
|
|
138
|
+
_token.Enable();
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
private void OnDestroy()
|
|
142
|
+
{
|
|
143
|
+
_token?.Disable();
|
|
144
|
+
_token = null;
|
|
145
|
+
_messageBus = null;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
private sealed class StaticMessageBusProvider : IMessageBusProvider
|
|
150
|
+
{
|
|
151
|
+
private readonly IMessageBus _bus = new MessageBus();
|
|
152
|
+
|
|
153
|
+
public IMessageBus Bus => _bus;
|
|
154
|
+
|
|
155
|
+
public IMessageBus Resolve()
|
|
156
|
+
{
|
|
157
|
+
return _bus;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
#endif
|
|
162
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
%YAML 1.1
|
|
2
|
+
%TAG !u! tag:unity3d.com,2011:
|
|
3
|
+
--- !u!114 &11400000
|
|
4
|
+
MonoBehaviour:
|
|
5
|
+
m_ObjectHideFlags: 0
|
|
6
|
+
m_CorrespondingSourceObject: {fileID: 0}
|
|
7
|
+
m_PrefabInstance: {fileID: 0}
|
|
8
|
+
m_PrefabAsset: {fileID: 0}
|
|
9
|
+
m_GameObject: {fileID: 0}
|
|
10
|
+
m_Enabled: 1
|
|
11
|
+
m_EditorHideFlags: 0
|
|
12
|
+
m_Script: {fileID: 11500000, guid: f50e4916e4924f2788a73057a16764c0, type: 3}
|
|
13
|
+
m_Name: ReflexSettings
|
|
14
|
+
m_EditorClassIdentifier:
|
|
15
|
+
<LogLevel>k__BackingField: 0
|
|
16
|
+
<ProjectScopes>k__BackingField: []
|
package/Tests/Runtime/Integrations/Reflex/WallstopStudios.DxMessaging.Tests.Runtime.Reflex.asmdef
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "WallstopStudios.DxMessaging.Tests.Runtime.Reflex",
|
|
3
|
+
"rootNamespace": "DxMessaging.Tests.Runtime.Reflex",
|
|
4
|
+
"references": [
|
|
5
|
+
"UnityEngine.TestRunner",
|
|
6
|
+
"UnityEditor.TestRunner",
|
|
7
|
+
"WallstopStudios.DxMessaging",
|
|
8
|
+
"WallstopStudios.DxMessaging.Tests.Runtime",
|
|
9
|
+
"Reflex",
|
|
10
|
+
"WallstopStudios.DxMessaging.Reflex"
|
|
11
|
+
],
|
|
12
|
+
"includePlatforms": [],
|
|
13
|
+
"excludePlatforms": [],
|
|
14
|
+
"allowUnsafeCode": false,
|
|
15
|
+
"overrideReferences": true,
|
|
16
|
+
"precompiledReferences": ["nunit.framework.dll"],
|
|
17
|
+
"autoReferenced": true,
|
|
18
|
+
"defineConstraints": ["UNITY_INCLUDE_TESTS", "REFLEX_PRESENT"],
|
|
19
|
+
"versionDefines": [
|
|
20
|
+
{
|
|
21
|
+
"name": "com.gustavopsantos.reflex",
|
|
22
|
+
"expression": "0.0.1",
|
|
23
|
+
"define": "REFLEX_PRESENT"
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"noEngineReferences": false
|
|
27
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
namespace DxMessaging.Tests.Runtime.VContainer
|
|
2
|
+
{
|
|
3
|
+
#if VCONTAINER_PRESENT
|
|
4
|
+
using System;
|
|
5
|
+
using DxMessaging.Core;
|
|
6
|
+
using DxMessaging.Core.Extensions;
|
|
7
|
+
using DxMessaging.Core.MessageBus;
|
|
8
|
+
using DxMessaging.Tests.Runtime;
|
|
9
|
+
using DxMessaging.Tests.Runtime.Scripts.Messages;
|
|
10
|
+
using DxMessaging.Unity;
|
|
11
|
+
using DxMessaging.Unity.Integrations.VContainer;
|
|
12
|
+
using global::VContainer;
|
|
13
|
+
using global::VContainer.Unity;
|
|
14
|
+
using NUnit.Framework;
|
|
15
|
+
using UnityEngine;
|
|
16
|
+
|
|
17
|
+
public sealed class VContainerIntegrationTests : UnityFixtureBase
|
|
18
|
+
{
|
|
19
|
+
[Test]
|
|
20
|
+
public void ContainerInjectsMessagingComponentWithCustomBus()
|
|
21
|
+
{
|
|
22
|
+
ContainerBuilder builder = new();
|
|
23
|
+
builder.Register<MessageBus>(Lifetime.Singleton).As<IMessageBus>();
|
|
24
|
+
|
|
25
|
+
IObjectResolver resolver = TrackDisposable(builder.Build());
|
|
26
|
+
IMessageBus bus = resolver.Resolve<IMessageBus>();
|
|
27
|
+
Assert.NotNull(bus);
|
|
28
|
+
|
|
29
|
+
GameObject go = Track(
|
|
30
|
+
new GameObject(
|
|
31
|
+
nameof(ContainerInjectsMessagingComponentWithCustomBus),
|
|
32
|
+
typeof(MessagingComponent),
|
|
33
|
+
typeof(VContainerConfiguredListener)
|
|
34
|
+
)
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
resolver.InjectGameObject(go);
|
|
38
|
+
VContainerConfiguredListener listener = go.GetComponent<VContainerConfiguredListener>();
|
|
39
|
+
listener.Initialize(bus);
|
|
40
|
+
|
|
41
|
+
SimpleUntargetedMessage message = new();
|
|
42
|
+
message.EmitUntargeted(bus);
|
|
43
|
+
|
|
44
|
+
Assert.AreEqual(
|
|
45
|
+
1,
|
|
46
|
+
listener.ReceivedCount,
|
|
47
|
+
"Listener should receive messages emitted via the VContainer-resolved bus."
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
[Test]
|
|
52
|
+
public void RegistrationExtensionsExposeBuilder()
|
|
53
|
+
{
|
|
54
|
+
ContainerBuilder builder = new();
|
|
55
|
+
builder.Register<MessageBus>(Lifetime.Singleton).As<IMessageBus>();
|
|
56
|
+
builder.RegisterMessageRegistrationBuilder();
|
|
57
|
+
|
|
58
|
+
IObjectResolver resolver = TrackDisposable(builder.Build());
|
|
59
|
+
IMessageRegistrationBuilder registrationBuilder =
|
|
60
|
+
resolver.Resolve<IMessageRegistrationBuilder>();
|
|
61
|
+
using MessageRegistrationLease lease = registrationBuilder.Build(
|
|
62
|
+
new MessageRegistrationBuildOptions()
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
Assert.AreSame(
|
|
66
|
+
resolver.Resolve<IMessageBus>(),
|
|
67
|
+
lease.MessageBus,
|
|
68
|
+
"Registration extension should resolve a builder backed by the container bus."
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
[Test]
|
|
73
|
+
public void RegistrationExtensionsPreferResolvedProvider()
|
|
74
|
+
{
|
|
75
|
+
ContainerBuilder builder = new();
|
|
76
|
+
builder.Register<MessageBus>(Lifetime.Singleton).As<IMessageBus>();
|
|
77
|
+
|
|
78
|
+
MessageBus providerBus = new MessageBus();
|
|
79
|
+
builder
|
|
80
|
+
.RegisterInstance<IMessageBusProvider>(new StaticMessageBusProvider(providerBus))
|
|
81
|
+
.As<IMessageBusProvider>();
|
|
82
|
+
builder.RegisterMessageRegistrationBuilder();
|
|
83
|
+
|
|
84
|
+
IObjectResolver resolver = TrackDisposable(builder.Build());
|
|
85
|
+
IMessageRegistrationBuilder registrationBuilder =
|
|
86
|
+
resolver.Resolve<IMessageRegistrationBuilder>();
|
|
87
|
+
using MessageRegistrationLease lease = registrationBuilder.Build(
|
|
88
|
+
new MessageRegistrationBuildOptions()
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
Assert.AreSame(
|
|
92
|
+
providerBus,
|
|
93
|
+
lease.MessageBus,
|
|
94
|
+
"Registration extensions should prefer an explicitly registered IMessageBusProvider."
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private sealed class VContainerConfiguredListener : MonoBehaviour, IDisposable
|
|
99
|
+
{
|
|
100
|
+
private IMessageBus _messageBus;
|
|
101
|
+
private MessageRegistrationToken _token;
|
|
102
|
+
|
|
103
|
+
internal int ReceivedCount { get; private set; }
|
|
104
|
+
|
|
105
|
+
internal void Initialize(IMessageBus messageBus)
|
|
106
|
+
{
|
|
107
|
+
_messageBus = messageBus;
|
|
108
|
+
MessagingComponent messagingComponent = GetComponent<MessagingComponent>();
|
|
109
|
+
messagingComponent.Configure(_messageBus, MessageBusRebindMode.RebindActive);
|
|
110
|
+
|
|
111
|
+
_token = messagingComponent.Create(this);
|
|
112
|
+
_ = _token.RegisterUntargeted<SimpleUntargetedMessage>(_ => ++ReceivedCount);
|
|
113
|
+
_token.Enable();
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
public void Dispose()
|
|
117
|
+
{
|
|
118
|
+
_token?.Disable();
|
|
119
|
+
_token = null;
|
|
120
|
+
_messageBus = null;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
private sealed class StaticMessageBusProvider : IMessageBusProvider
|
|
125
|
+
{
|
|
126
|
+
private readonly IMessageBus _bus;
|
|
127
|
+
|
|
128
|
+
public StaticMessageBusProvider(IMessageBus bus)
|
|
129
|
+
{
|
|
130
|
+
_bus = bus;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
public IMessageBus Resolve()
|
|
134
|
+
{
|
|
135
|
+
return _bus;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
#endif
|
|
140
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "WallstopStudios.DxMessaging.Tests.Runtime.VContainer",
|
|
3
|
+
"rootNamespace": "DxMessaging.Tests.Runtime.VContainer",
|
|
4
|
+
"references": [
|
|
5
|
+
"UnityEngine.TestRunner",
|
|
6
|
+
"UnityEditor.TestRunner",
|
|
7
|
+
"WallstopStudios.DxMessaging",
|
|
8
|
+
"WallstopStudios.DxMessaging.Tests.Runtime",
|
|
9
|
+
"VContainer",
|
|
10
|
+
"WallstopStudios.DxMessaging.VContainer"
|
|
11
|
+
],
|
|
12
|
+
"includePlatforms": [],
|
|
13
|
+
"excludePlatforms": [],
|
|
14
|
+
"allowUnsafeCode": false,
|
|
15
|
+
"overrideReferences": true,
|
|
16
|
+
"precompiledReferences": ["nunit.framework.dll"],
|
|
17
|
+
"autoReferenced": true,
|
|
18
|
+
"defineConstraints": ["UNITY_INCLUDE_TESTS", "VCONTAINER_PRESENT"],
|
|
19
|
+
"versionDefines": [
|
|
20
|
+
{
|
|
21
|
+
"name": "jp.cysharp.vcontainer",
|
|
22
|
+
"expression": "0.0.1",
|
|
23
|
+
"define": "VCONTAINER_PRESENT"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"name": "jp.hadashikick.vcontainer",
|
|
27
|
+
"expression": "0.0.1",
|
|
28
|
+
"define": "VCONTAINER_PRESENT"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"name": "VContainer",
|
|
32
|
+
"expression": "0.0.1",
|
|
33
|
+
"define": "VCONTAINER_PRESENT"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"noEngineReferences": false
|
|
37
|
+
}
|
package/Tests/Runtime/Integrations/Zenject/WallstopStudios.DxMessaging.Tests.Runtime.Zenject.asmdef
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "WallstopStudios.DxMessaging.Tests.Runtime.Zenject",
|
|
3
|
+
"rootNamespace": "DxMessaging.Tests.Runtime.Zenject",
|
|
4
|
+
"references": [
|
|
5
|
+
"UnityEngine.TestRunner",
|
|
6
|
+
"UnityEditor.TestRunner",
|
|
7
|
+
"WallstopStudios.DxMessaging",
|
|
8
|
+
"WallstopStudios.DxMessaging.Tests.Runtime",
|
|
9
|
+
"Zenject",
|
|
10
|
+
"WallstopStudios.DxMessaging.Zenject"
|
|
11
|
+
],
|
|
12
|
+
"includePlatforms": [],
|
|
13
|
+
"excludePlatforms": [],
|
|
14
|
+
"allowUnsafeCode": false,
|
|
15
|
+
"overrideReferences": true,
|
|
16
|
+
"precompiledReferences": ["nunit.framework.dll"],
|
|
17
|
+
"autoReferenced": true,
|
|
18
|
+
"defineConstraints": ["UNITY_INCLUDE_TESTS", "ZENJECT_PRESENT"],
|
|
19
|
+
"versionDefines": [
|
|
20
|
+
{
|
|
21
|
+
"name": "com.extenject.zenject",
|
|
22
|
+
"expression": "0.0.1",
|
|
23
|
+
"define": "ZENJECT_PRESENT"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"name": "com.modesttree.zenject",
|
|
27
|
+
"expression": "0.0.1",
|
|
28
|
+
"define": "ZENJECT_PRESENT"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"name": "com.svermeulen.extenject",
|
|
32
|
+
"expression": "0.0.1",
|
|
33
|
+
"define": "ZENJECT_PRESENT"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"noEngineReferences": false
|
|
37
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
namespace DxMessaging.Tests.Runtime.Zenject
|
|
2
|
+
{
|
|
3
|
+
#if ZENJECT_PRESENT
|
|
4
|
+
using DxMessaging.Core;
|
|
5
|
+
using System.Reflection;
|
|
6
|
+
using DxMessaging.Core.Extensions;
|
|
7
|
+
using DxMessaging.Core.MessageBus;
|
|
8
|
+
using DxMessaging.Tests.Runtime;
|
|
9
|
+
using DxMessaging.Tests.Runtime.Scripts.Messages;
|
|
10
|
+
using DxMessaging.Unity;
|
|
11
|
+
using DxMessaging.Unity.Integrations.Zenject;
|
|
12
|
+
using global::Zenject;
|
|
13
|
+
using NUnit.Framework;
|
|
14
|
+
using UnityEngine;
|
|
15
|
+
|
|
16
|
+
public sealed class ZenjectIntegrationTests : UnityFixtureBase
|
|
17
|
+
{
|
|
18
|
+
[Test]
|
|
19
|
+
public void InstallerBindsMessageBusAndConfiguratorAppliesIt()
|
|
20
|
+
{
|
|
21
|
+
DiContainer container = new();
|
|
22
|
+
container.BindInterfacesAndSelfTo<MessageBus>().AsSingle();
|
|
23
|
+
|
|
24
|
+
IMessageBus resolvedBus = container.Resolve<IMessageBus>();
|
|
25
|
+
Assert.IsNotNull(resolvedBus, "Zenject installer should bind IMessageBus.");
|
|
26
|
+
|
|
27
|
+
GameObject go = Track(
|
|
28
|
+
new GameObject(
|
|
29
|
+
nameof(InstallerBindsMessageBusAndConfiguratorAppliesIt),
|
|
30
|
+
typeof(MessagingComponent),
|
|
31
|
+
typeof(ZenjectConfiguredListener)
|
|
32
|
+
)
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
ZenjectConfiguredListener listener = go.GetComponent<ZenjectConfiguredListener>();
|
|
36
|
+
listener.Initialize(resolvedBus);
|
|
37
|
+
|
|
38
|
+
SimpleUntargetedMessage message = new();
|
|
39
|
+
message.EmitUntargeted(resolvedBus);
|
|
40
|
+
|
|
41
|
+
Assert.AreEqual(
|
|
42
|
+
1,
|
|
43
|
+
listener.ReceivedCount,
|
|
44
|
+
"Listener should observe messages emitted through the container-provided bus."
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
[Test]
|
|
49
|
+
public void RegistrationInstallerProvidesBuilderBoundToContainerBus()
|
|
50
|
+
{
|
|
51
|
+
DiContainer container = new();
|
|
52
|
+
container.BindInterfacesAndSelfTo<MessageBus>().AsSingle();
|
|
53
|
+
|
|
54
|
+
DxMessagingRegistrationInstaller installer = new DxMessagingRegistrationInstaller();
|
|
55
|
+
installer.RunInstallBindings(container);
|
|
56
|
+
|
|
57
|
+
IMessageRegistrationBuilder registrationBuilder =
|
|
58
|
+
container.Resolve<IMessageRegistrationBuilder>();
|
|
59
|
+
Assert.NotNull(registrationBuilder);
|
|
60
|
+
|
|
61
|
+
using MessageRegistrationLease lease = registrationBuilder.Build(
|
|
62
|
+
new MessageRegistrationBuildOptions()
|
|
63
|
+
);
|
|
64
|
+
Assert.AreSame(
|
|
65
|
+
container.Resolve<IMessageBus>(),
|
|
66
|
+
lease.MessageBus,
|
|
67
|
+
"Builder resolved by the installer should default to the container-provided bus."
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
[Test]
|
|
72
|
+
public void RegistrationInstallerPrefersBoundProvider()
|
|
73
|
+
{
|
|
74
|
+
DiContainer container = new();
|
|
75
|
+
MessageBus providerBus = new();
|
|
76
|
+
container
|
|
77
|
+
.Bind<IMessageBusProvider>()
|
|
78
|
+
.FromInstance(new FixedMessageBusProvider(providerBus))
|
|
79
|
+
.AsSingle();
|
|
80
|
+
container.BindInterfacesAndSelfTo<MessageBus>().AsSingle();
|
|
81
|
+
|
|
82
|
+
DxMessagingRegistrationInstaller installer = new DxMessagingRegistrationInstaller();
|
|
83
|
+
installer.RunInstallBindings(container);
|
|
84
|
+
|
|
85
|
+
IMessageRegistrationBuilder registrationBuilder =
|
|
86
|
+
container.Resolve<IMessageRegistrationBuilder>();
|
|
87
|
+
using MessageRegistrationLease lease = registrationBuilder.Build(
|
|
88
|
+
new MessageRegistrationBuildOptions()
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
Assert.AreSame(
|
|
92
|
+
providerBus,
|
|
93
|
+
lease.MessageBus,
|
|
94
|
+
"Builder should prefer the container-provided IMessageBusProvider when available."
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private sealed class ZenjectConfiguredListener : MonoBehaviour
|
|
99
|
+
{
|
|
100
|
+
private IMessageBus _messageBus;
|
|
101
|
+
private MessageRegistrationToken _token;
|
|
102
|
+
|
|
103
|
+
internal int ReceivedCount { get; private set; }
|
|
104
|
+
|
|
105
|
+
internal void Initialize(IMessageBus messageBus)
|
|
106
|
+
{
|
|
107
|
+
_messageBus = messageBus;
|
|
108
|
+
MessagingComponent messagingComponent = GetComponent<MessagingComponent>();
|
|
109
|
+
messagingComponent.Configure(_messageBus, MessageBusRebindMode.RebindActive);
|
|
110
|
+
|
|
111
|
+
_token = messagingComponent.Create(this);
|
|
112
|
+
_ = _token.RegisterUntargeted<SimpleUntargetedMessage>(_ => ++ReceivedCount);
|
|
113
|
+
_token.Enable();
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
private void OnDestroy()
|
|
117
|
+
{
|
|
118
|
+
_token?.Disable();
|
|
119
|
+
_token = null;
|
|
120
|
+
_messageBus = null;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
private sealed class FixedMessageBusProvider : IMessageBusProvider
|
|
125
|
+
{
|
|
126
|
+
private readonly IMessageBus _bus;
|
|
127
|
+
|
|
128
|
+
public FixedMessageBusProvider(IMessageBus bus)
|
|
129
|
+
{
|
|
130
|
+
_bus = bus;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
public IMessageBus Resolve()
|
|
134
|
+
{
|
|
135
|
+
return _bus;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
#endif
|
|
140
|
+
}
|