← Back to Index | Troubleshooting | Getting Started | Glossary
- No. You can implement
IUntargetedMessage<T>,ITargetedMessage<T>, orIBroadcastMessage<T>directly (recommended for structs). Attributes are optional and help tooling/source‑gen.
- Untargeted - global notifications (any listener).
- Targeted - commands/events for a specific recipient.
- Broadcast - facts emitted from a source that others may observe.
- Use the
priorityparameter at registration; lower runs earlier. Interceptors run before handlers; post‑processors run after.
- Yes. Use
RegisterTargetedWithoutTargeting<T>orRegisterBroadcastWithoutSource<T>(and their post‑processor counterparts).
- Enable logs and diagnostics: Diagnostics.
- The newly registered listener will not run for the current message emission. It will only become active starting with the next message emission.
- This is called "snapshot semantics" — when a message is emitted, DxMessaging takes a snapshot of all current listeners and uses that frozen list for the entire emission.
- This applies to all listener types (handlers, interceptors, post-processors) and all message categories (Untargeted, Targeted, Broadcast).
- This behavior prevents infinite loops and ensures predictable execution order. See Interceptors & Ordering for details and examples.
- A global bus is provided (
MessageHandler.MessageBus). You can also create and pass your ownMessageBusinstance to isolate subsystems and tests.
- Yes. You can integrate with legacy patterns via
ReflexiveMessage. Prefer DxMessaging for new code.
- New to DxMessaging?
- → Visual Guide — Beginner-friendly introduction
- → Getting Started — Complete guide
- → Glossary — All terms explained
- Common Issues
- → Troubleshooting — Solutions to common problems
- → Common Patterns — See how to use it correctly
- Reference
- → Quick Reference — API cheat sheet
- → Message Types — Which type to use when