i think what you are doing actually makes sense and you are moving in the right direction. Using the service container tag approach is cleaner than calling app() inside your method for each validator. It makes your AttachMembersToRoom class more testable and decoupled because the validators are injected rather than resolved manually.
A few points to consider:
Memory / Performance: Tagging validators in the container doe not instantiate them all upfront unless you explicitly resolve them. PHP will lazy-load them when iterating over $memberValidators, so memory usage is usually fine.
Testability: Since you inject an iterable of validators, you can now mock or bypass individual validators in tests easily by passing a custom iterable to the constructor. That is much cleaner than using app() directly.
Simplicity vs Overcomplication: If you only have a few validators, this might feel like overengineering, but if your validation rules grow, this approach scales well. You could even add an interface like MemberValidatorInterface to make it explicit what each validator does.