com.wallstop-studios.dxmessaging 2.0.0-rc27.3.1 → 2.1.0
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 +1352 -141
- package/Docs/Compatibility.md +27 -0
- package/Docs/DesignAndArchitecture.md +41 -34
- package/Docs/EmitShorthands.md +34 -0
- package/Docs/GettingStarted.md +84 -17
- package/Docs/Helpers.md +1 -1
- package/Docs/Index.md +28 -25
- package/Docs/Install.md +29 -6
- package/Docs/Integrations/Reflex.md +292 -0
- package/Docs/Integrations/Reflex.md.meta +7 -0
- 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/Overview.md +114 -20
- package/Docs/Patterns.md +327 -2
- package/Docs/Performance.md +9 -9
- package/Docs/QuickReference.md +31 -0
- package/Docs/RuntimeConfiguration.md +407 -0
- package/Docs/RuntimeConfiguration.md.meta +7 -0
- package/Docs/UnityIntegration.md +3 -1
- package/Docs/VisualGuide.md +281 -167
- package/Editor/Analyzers/Microsoft.CodeAnalysis.CSharp.dll +0 -0
- package/Editor/Analyzers/Microsoft.CodeAnalysis.CSharp.dll.meta +3 -3
- package/Editor/Analyzers/Microsoft.CodeAnalysis.dll +0 -0
- package/Editor/Analyzers/Microsoft.CodeAnalysis.dll.meta +2 -2
- package/Editor/Analyzers/System.Collections.Immutable.dll +0 -0
- package/Editor/Analyzers/System.Reflection.Metadata.dll +0 -0
- package/Editor/Analyzers/System.Runtime.CompilerServices.Unsafe.dll +0 -0
- package/Editor/CustomEditors/MessagingComponentEditor.cs +15 -6
- package/README.md +388 -67
- package/Runtime/AssemblyInfo.cs +4 -0
- 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/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 +164 -2
- 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 +81 -0
- package/Samples~/DI/VContainer/SampleLifetimeScope.cs.meta +11 -0
- package/Samples~/DI/VContainer.meta +8 -0
- package/Samples~/DI/Zenject/SampleInstaller.cs +67 -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 +86 -28
- package/Samples~/Mini Combat/Walkthrough.md +41 -25
- package/Samples~/UI Buttons + Inspector/DiagnosticsEnabler.cs +12 -2
- package/Samples~/UI Buttons + Inspector/README.md +55 -12
- 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/SourceGeneratorNestedTests.cs +1 -1
- 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,38 @@
|
|
|
1
|
+
namespace DxMessaging.Unity
|
|
2
|
+
{
|
|
3
|
+
using DxMessaging.Core;
|
|
4
|
+
using DxMessaging.Core.MessageBus;
|
|
5
|
+
using UnityEngine;
|
|
6
|
+
|
|
7
|
+
/// <summary>
|
|
8
|
+
/// Serialized provider that always returns the original global message bus created during static initialisation.
|
|
9
|
+
/// </summary>
|
|
10
|
+
/// <remarks>
|
|
11
|
+
/// Unlike <see cref="CurrentGlobalMessageBusProvider"/>, this asset ignores runtime overrides of
|
|
12
|
+
/// <see cref="MessageHandler.MessageBus"/>, making it ideal for debugging or diagnostics scenarios where you need a
|
|
13
|
+
/// stable reference to the startup bus.
|
|
14
|
+
/// </remarks>
|
|
15
|
+
/// <example>
|
|
16
|
+
/// <code>
|
|
17
|
+
/// // Temporarily override the global bus while still keeping a reference to the startup instance.
|
|
18
|
+
/// var initialProvider = Resources.Load<InitialGlobalMessageBusProvider>("InitialGlobalMessageBusProvider");
|
|
19
|
+
/// IMessageBus startupBus = initialProvider.Resolve();
|
|
20
|
+
/// using (MessageHandler.OverrideGlobalMessageBus(customBus))
|
|
21
|
+
/// {
|
|
22
|
+
/// // ... scenario under test
|
|
23
|
+
/// }
|
|
24
|
+
/// // startupBus still references the original global bus
|
|
25
|
+
/// </code>
|
|
26
|
+
/// </summary>
|
|
27
|
+
[CreateAssetMenu(
|
|
28
|
+
fileName = "InitialGlobalMessageBusProvider",
|
|
29
|
+
menuName = "Wallstop Studios/DxMessaging/Message Bus Providers/Initial Global Message Bus"
|
|
30
|
+
)]
|
|
31
|
+
public sealed class InitialGlobalMessageBusProvider : ScriptableMessageBusProvider
|
|
32
|
+
{
|
|
33
|
+
public override IMessageBus Resolve()
|
|
34
|
+
{
|
|
35
|
+
return MessageHandler.InitialGlobalMessageBus;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
using System.Runtime.CompilerServices;
|
|
2
|
+
|
|
3
|
+
[assembly: InternalsVisibleTo(
|
|
4
|
+
assemblyName: "WallstopStudios.DxMessaging.Tests.Runtime",
|
|
5
|
+
AllInternalsVisible = true
|
|
6
|
+
)]
|
|
7
|
+
[assembly: InternalsVisibleTo("WallstopStudios.DxMessaging.Editor")]
|
|
8
|
+
[assembly: InternalsVisibleTo("WallstopStudios.DxMessaging.Tests.Runtime")]
|
|
9
|
+
[assembly: InternalsVisibleTo("WallstopStudios.DxMessaging.Tests.Runtime.Reflex")]
|
|
10
|
+
[assembly: InternalsVisibleTo("WallstopStudios.DxMessaging.Tests.Runtime.VContainer")]
|
|
11
|
+
[assembly: InternalsVisibleTo("WallstopStudios.DxMessaging.Tests.Runtime.Zenject")]
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
namespace DxMessaging.Unity.Integrations.Reflex
|
|
2
|
+
{
|
|
3
|
+
#if REFLEX_PRESENT
|
|
4
|
+
using Core.MessageBus;
|
|
5
|
+
using global::Reflex.Attributes;
|
|
6
|
+
using global::Reflex.Core;
|
|
7
|
+
|
|
8
|
+
/// <summary>
|
|
9
|
+
/// Optional installer that binds <see cref="IMessageRegistrationBuilder"/> for Reflex containers.
|
|
10
|
+
/// </summary>
|
|
11
|
+
public sealed class DxMessagingRegistrationInstaller : IInstaller
|
|
12
|
+
{
|
|
13
|
+
public void InstallBindings(ContainerBuilder containerBuilder)
|
|
14
|
+
{
|
|
15
|
+
containerBuilder.AddSingleton(
|
|
16
|
+
typeof(ContainerMessageRegistrationBuilder),
|
|
17
|
+
typeof(ContainerMessageRegistrationBuilder),
|
|
18
|
+
typeof(IMessageRegistrationBuilder)
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
internal sealed class ContainerMessageRegistrationBuilder : IMessageRegistrationBuilder
|
|
23
|
+
{
|
|
24
|
+
[Inject]
|
|
25
|
+
private Container _container;
|
|
26
|
+
|
|
27
|
+
public MessageRegistrationLease Build(MessageRegistrationBuildOptions options)
|
|
28
|
+
{
|
|
29
|
+
MessageRegistrationBuilder innerBuilder = ResolveInnerBuilder();
|
|
30
|
+
return innerBuilder.Build(options);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
private MessageRegistrationBuilder ResolveInnerBuilder()
|
|
34
|
+
{
|
|
35
|
+
IMessageBusProvider provider = TryResolveProvider();
|
|
36
|
+
if (provider != null)
|
|
37
|
+
{
|
|
38
|
+
return new MessageRegistrationBuilder(provider);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return new MessageRegistrationBuilder(new ContainerMessageBusProvider(_container));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
private IMessageBusProvider TryResolveProvider()
|
|
45
|
+
{
|
|
46
|
+
try
|
|
47
|
+
{
|
|
48
|
+
return _container.Resolve<IMessageBusProvider>();
|
|
49
|
+
}
|
|
50
|
+
catch
|
|
51
|
+
{
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
public sealed class ContainerMessageBusProvider : IMessageBusProvider
|
|
58
|
+
{
|
|
59
|
+
private readonly Container _container;
|
|
60
|
+
|
|
61
|
+
public ContainerMessageBusProvider(Container container)
|
|
62
|
+
{
|
|
63
|
+
_container = container;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
public IMessageBus Resolve()
|
|
67
|
+
{
|
|
68
|
+
return _container.Resolve<IMessageBus>();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
#endif
|
|
73
|
+
}
|
|
@@ -0,0 +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
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
using System.Runtime.CompilerServices;
|
|
2
|
+
|
|
3
|
+
[assembly: InternalsVisibleTo(
|
|
4
|
+
assemblyName: "WallstopStudios.DxMessaging.Tests.Runtime",
|
|
5
|
+
AllInternalsVisible = true
|
|
6
|
+
)]
|
|
7
|
+
[assembly: InternalsVisibleTo("WallstopStudios.DxMessaging.Editor")]
|
|
8
|
+
[assembly: InternalsVisibleTo("WallstopStudios.DxMessaging.Tests.Runtime")]
|
|
9
|
+
[assembly: InternalsVisibleTo("WallstopStudios.DxMessaging.Tests.Runtime.Reflex")]
|
|
10
|
+
[assembly: InternalsVisibleTo("WallstopStudios.DxMessaging.Tests.Runtime.VContainer")]
|
|
11
|
+
[assembly: InternalsVisibleTo("WallstopStudios.DxMessaging.Tests.Runtime.Zenject")]
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
namespace DxMessaging.Unity.Integrations.VContainer
|
|
2
|
+
{
|
|
3
|
+
#if VCONTAINER_PRESENT
|
|
4
|
+
using global::VContainer;
|
|
5
|
+
using Core.MessageBus;
|
|
6
|
+
|
|
7
|
+
/// <summary>
|
|
8
|
+
/// Provides convenience extension methods for wiring <see cref="IMessageRegistrationBuilder"/> inside VContainer scopes.
|
|
9
|
+
/// </summary>
|
|
10
|
+
public static class VContainerRegistrationExtensions
|
|
11
|
+
{
|
|
12
|
+
/// <summary>
|
|
13
|
+
/// Registers <see cref="IMessageRegistrationBuilder"/> as a transient service backed by the scoped message bus.
|
|
14
|
+
/// </summary>
|
|
15
|
+
public static void RegisterMessageRegistrationBuilder(this IContainerBuilder builder)
|
|
16
|
+
{
|
|
17
|
+
builder.Register<IMessageRegistrationBuilder>(CreateBuilder, Lifetime.Transient);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
private static IMessageRegistrationBuilder CreateBuilder(IObjectResolver resolver)
|
|
21
|
+
{
|
|
22
|
+
if (resolver.TryResolve(out IMessageBusProvider provider))
|
|
23
|
+
{
|
|
24
|
+
return new MessageRegistrationBuilder(provider);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return new MessageRegistrationBuilder(new ResolverMessageBusProvider(resolver));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public sealed class ResolverMessageBusProvider : IMessageBusProvider
|
|
31
|
+
{
|
|
32
|
+
private readonly IObjectResolver _resolver;
|
|
33
|
+
|
|
34
|
+
public ResolverMessageBusProvider(IObjectResolver resolver)
|
|
35
|
+
{
|
|
36
|
+
_resolver = resolver;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
public IMessageBus Resolve()
|
|
40
|
+
{
|
|
41
|
+
return _resolver.Resolve<IMessageBus>();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
#endif
|
|
46
|
+
}
|
|
@@ -0,0 +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
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
using System.Runtime.CompilerServices;
|
|
2
|
+
|
|
3
|
+
[assembly: InternalsVisibleTo(
|
|
4
|
+
assemblyName: "WallstopStudios.DxMessaging.Tests.Runtime",
|
|
5
|
+
AllInternalsVisible = true
|
|
6
|
+
)]
|
|
7
|
+
[assembly: InternalsVisibleTo("WallstopStudios.DxMessaging.Editor")]
|
|
8
|
+
[assembly: InternalsVisibleTo("WallstopStudios.DxMessaging.Tests.Runtime")]
|
|
9
|
+
[assembly: InternalsVisibleTo("WallstopStudios.DxMessaging.Tests.Runtime.Reflex")]
|
|
10
|
+
[assembly: InternalsVisibleTo("WallstopStudios.DxMessaging.Tests.Runtime.VContainer")]
|
|
11
|
+
[assembly: InternalsVisibleTo("WallstopStudios.DxMessaging.Tests.Runtime.Zenject")]
|
|
@@ -0,0 +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
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
namespace DxMessaging.Unity.Integrations.Zenject
|
|
2
|
+
{
|
|
3
|
+
#if ZENJECT_PRESENT
|
|
4
|
+
using global::Zenject;
|
|
5
|
+
using Core.MessageBus;
|
|
6
|
+
|
|
7
|
+
/// <summary>
|
|
8
|
+
/// Optional installer that exposes <see cref="IMessageRegistrationBuilder"/> using the scoped Zenject container.
|
|
9
|
+
/// </summary>
|
|
10
|
+
public sealed class DxMessagingRegistrationInstaller : MonoInstaller
|
|
11
|
+
{
|
|
12
|
+
internal void RunInstallBindings(DiContainer container)
|
|
13
|
+
{
|
|
14
|
+
Container = container;
|
|
15
|
+
InstallBindings();
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
public override void InstallBindings()
|
|
19
|
+
{
|
|
20
|
+
Container.Bind<IMessageRegistrationBuilder>().FromMethod(CreateBuilder).AsTransient();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
private static IMessageRegistrationBuilder CreateBuilder(InjectContext context)
|
|
24
|
+
{
|
|
25
|
+
IMessageBusProvider provider = context.Container.TryResolve<IMessageBusProvider>();
|
|
26
|
+
if (provider != null)
|
|
27
|
+
{
|
|
28
|
+
return new MessageRegistrationBuilder(provider);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
IMessageBus messageBus = context.Container.Resolve<IMessageBus>();
|
|
32
|
+
return new MessageRegistrationBuilder(
|
|
33
|
+
new ContainerMessageBusProvider(context.Container, messageBus)
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public sealed class ContainerMessageBusProvider : IMessageBusProvider
|
|
38
|
+
{
|
|
39
|
+
private readonly DiContainer _container;
|
|
40
|
+
private readonly IMessageBus _cachedBus;
|
|
41
|
+
|
|
42
|
+
public ContainerMessageBusProvider(DiContainer container, IMessageBus cachedBus)
|
|
43
|
+
{
|
|
44
|
+
_container = container;
|
|
45
|
+
_cachedBus = cachedBus;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public IMessageBus Resolve()
|
|
49
|
+
{
|
|
50
|
+
return _cachedBus ?? _container.Resolve<IMessageBus>();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
#endif
|
|
55
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
namespace DxMessaging.Unity
|
|
2
2
|
{
|
|
3
3
|
using Core;
|
|
4
|
+
using Core.MessageBus;
|
|
4
5
|
using Core.Messages;
|
|
5
6
|
using UnityEngine;
|
|
6
7
|
|
|
@@ -65,6 +66,9 @@ namespace DxMessaging.Unity
|
|
|
65
66
|
protected virtual bool RegisterForStringMessages => true;
|
|
66
67
|
|
|
67
68
|
protected MessagingComponent _messagingComponent;
|
|
69
|
+
protected IMessageBus _configuredMessageBus;
|
|
70
|
+
protected IMessageBusProvider _configuredMessageBusProvider;
|
|
71
|
+
protected MessageBusProviderHandle _configuredMessageBusProviderHandle;
|
|
68
72
|
|
|
69
73
|
/// <summary>
|
|
70
74
|
/// Creates the <see cref="MessagingComponent"/>, token, and calls <see cref="RegisterMessageHandlers"/>.
|
|
@@ -72,6 +76,30 @@ namespace DxMessaging.Unity
|
|
|
72
76
|
protected virtual void Awake()
|
|
73
77
|
{
|
|
74
78
|
_messagingComponent = GetComponent<MessagingComponent>();
|
|
79
|
+
if (
|
|
80
|
+
_configuredMessageBusProvider == null
|
|
81
|
+
&& _configuredMessageBusProviderHandle.TryGetProvider(
|
|
82
|
+
out IMessageBusProvider handleProvider
|
|
83
|
+
)
|
|
84
|
+
)
|
|
85
|
+
{
|
|
86
|
+
_configuredMessageBusProvider = handleProvider;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (_configuredMessageBusProvider != null)
|
|
90
|
+
{
|
|
91
|
+
_messagingComponent.Configure(
|
|
92
|
+
_configuredMessageBusProvider,
|
|
93
|
+
MessageBusRebindMode.PreserveRegistrations
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
else if (_configuredMessageBus != null)
|
|
97
|
+
{
|
|
98
|
+
_messagingComponent.Configure(
|
|
99
|
+
_configuredMessageBus,
|
|
100
|
+
MessageBusRebindMode.PreserveRegistrations
|
|
101
|
+
);
|
|
102
|
+
}
|
|
75
103
|
_messageRegistrationToken = _messagingComponent.Create(this);
|
|
76
104
|
RegisterMessageHandlers();
|
|
77
105
|
}
|
|
@@ -143,6 +171,80 @@ namespace DxMessaging.Unity
|
|
|
143
171
|
// Intentionally left blank
|
|
144
172
|
}
|
|
145
173
|
|
|
174
|
+
/// <summary>
|
|
175
|
+
/// Supplies a custom <see cref="IMessageBus"/> for this component's underlying <see cref="MessageHandler"/>.
|
|
176
|
+
/// </summary>
|
|
177
|
+
/// <param name="messageBus">
|
|
178
|
+
/// Container-managed bus to use. Pass <see langword="null"/> to revert to the global bus
|
|
179
|
+
/// returned by <see cref="MessageHandler.MessageBus"/>.
|
|
180
|
+
/// </param>
|
|
181
|
+
/// <param name="rebindMode">Controls whether existing handlers should migrate to the provided bus immediately.</param>
|
|
182
|
+
/// <remarks>
|
|
183
|
+
/// Call this during dependency injection (before <see cref="Awake"/>) to ensure the token is created against
|
|
184
|
+
/// the provided bus, or invoke it later to retarget existing registrations.
|
|
185
|
+
/// </remarks>
|
|
186
|
+
public virtual void ConfigureMessageBus(
|
|
187
|
+
IMessageBus messageBus,
|
|
188
|
+
MessageBusRebindMode rebindMode
|
|
189
|
+
)
|
|
190
|
+
{
|
|
191
|
+
_configuredMessageBus = messageBus;
|
|
192
|
+
_configuredMessageBusProvider = null;
|
|
193
|
+
_configuredMessageBusProviderHandle = MessageBusProviderHandle.Empty;
|
|
194
|
+
_messagingComponent?.Configure(_configuredMessageBus, rebindMode);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/// <summary>
|
|
198
|
+
/// Supplies an <see cref="IMessageBusProvider"/> for this component's underlying <see cref="MessageHandler"/>.
|
|
199
|
+
/// </summary>
|
|
200
|
+
/// <param name="messageBusProvider">Provider used to resolve buses for this component.</param>
|
|
201
|
+
/// <param name="rebindMode">Controls whether existing handlers should migrate to the provided bus immediately.</param>
|
|
202
|
+
public virtual void ConfigureMessageBus(
|
|
203
|
+
IMessageBusProvider messageBusProvider,
|
|
204
|
+
MessageBusRebindMode rebindMode
|
|
205
|
+
)
|
|
206
|
+
{
|
|
207
|
+
_configuredMessageBusProvider = messageBusProvider;
|
|
208
|
+
if (messageBusProvider != null)
|
|
209
|
+
{
|
|
210
|
+
_configuredMessageBus = null;
|
|
211
|
+
_configuredMessageBusProviderHandle = MessageBusProviderHandle.FromProvider(
|
|
212
|
+
messageBusProvider
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
else
|
|
216
|
+
{
|
|
217
|
+
_configuredMessageBusProviderHandle = MessageBusProviderHandle.Empty;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
_messagingComponent?.Configure(_configuredMessageBusProvider, rebindMode);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/// <summary>
|
|
224
|
+
/// Supplies a serialized handle that resolves an <see cref="IMessageBusProvider"/>.
|
|
225
|
+
/// </summary>
|
|
226
|
+
/// <param name="providerHandle">Handle referencing the provider.</param>
|
|
227
|
+
/// <param name="rebindMode">Controls whether existing handlers should migrate to the provided bus immediately.</param>
|
|
228
|
+
public virtual void ConfigureMessageBus(
|
|
229
|
+
MessageBusProviderHandle providerHandle,
|
|
230
|
+
MessageBusRebindMode rebindMode
|
|
231
|
+
)
|
|
232
|
+
{
|
|
233
|
+
_configuredMessageBusProviderHandle = providerHandle;
|
|
234
|
+
if (providerHandle.TryGetProvider(out IMessageBusProvider provider))
|
|
235
|
+
{
|
|
236
|
+
_configuredMessageBusProvider = provider;
|
|
237
|
+
_configuredMessageBus = null;
|
|
238
|
+
}
|
|
239
|
+
else
|
|
240
|
+
{
|
|
241
|
+
_configuredMessageBusProvider = null;
|
|
242
|
+
_configuredMessageBusProviderHandle = MessageBusProviderHandle.Empty;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
_messagingComponent?.Configure(providerHandle, rebindMode);
|
|
246
|
+
}
|
|
247
|
+
|
|
146
248
|
/// <summary>
|
|
147
249
|
/// Demo handler: targeted string message to this GameObject.
|
|
148
250
|
/// Override to implement behavior.
|