Событие Отто автобус, должна быть вызвана только одна подписка

Я использовал шину событий отто, как объясняют здесь. Работает отлично.

http://square.github.io/otto/

https://code.google.com/p/guava-libraries/wiki/EventBusExplained

Сегодня я понимаю, что если я создаю событие и подписываюсь на него в 2 месте, оба получают вызов.

Чтобы более ясно об этом:

У меня есть банка, которая использует шину событий для внутренней коммуникации. Когда я использую эту банку в своем приложении, я могу зарегистрироваться на шине событий и также поймать событие.

Как этого избежать?

2 ответа

Похоже, он работает как задумано. Вы можете создать два разных события, чтобы решить вашу проблему.

Если вы регистрируете несколько получателей, и все они подписываются на определенное событие на шине событий, все эти получатели будут уведомлены, когда это событие будет опубликовано. Именно так и работает автобус Отто. Он следует шаблону публикации / подписки.

Важно отметить, что не потому, что вы зарегистрированы на шине событий, вы будете получать все события, отправленные на эту шину. Вы также должны подписаться на это событие.

Хорошо, в вашем случае, вам действительно нужно зарегистрироваться на этот конкретный автобус? Похоже, вы не хотите получать уведомления о конкретных событиях, используемых в этой библиотеке. Почему бы вам просто не создать второй экземпляр Bus? Затем вы можете использовать его для общения только внутри вашего приложения, не вступая в конфликт с вашей библиотечной связью. Это позволит вам подписаться на те же события, которые использует библиотека, но только ваше приложение будет зарегистрировано в этом приложении. Это создало бы разделение, которое, я думаю, вы ищете. Таким образом, в заключение у вас будет оригинальная шина для связи библиотеки и вторая шина для связи вашего приложения.

Может быть, мне не хватает того, что вы пытаетесь сделать здесь.

Другие вопросы по тегам