Что такое хороший пример использования Guice Mapbinder? - PullRequest
4 голосов
/ 04 сентября 2011

Я видел, как он использовался, но я не уверен, что это были хорошие примеры использования. У вас есть примеры использования idiomatic Guice Mapbinder ? (Случаи, когда Mapbinder действительно правильный инструмент для решения проблемы)

Ответы [ 2 ]

3 голосов
/ 04 сентября 2011

Случайно, это выглядит как разумный способ создания реестра реализаций с именем времени выполнения общего интерфейса. Подумайте о выборе одного из множества плагинов / режимов / чего угодно из командной строки или файла конфигурации: желаемая инъекция не может быть известна во время компиляции. MapBinder обеспечивает простой поиск во время выполнения, не прибегая к переключению типов.

1 голос
/ 05 сентября 2011

Я широко использую его в Guts-GUI .В частности, вы можете взглянуть на ResourceModule, где он используется для сопоставления прав ResourceConverter<T> для данного типа T:

Map<TypeLiteral<?>>, ResourceConverter<?>>

MapBinder создается непосредственнов вспомогательном классе Resources.

Таким образом, любой модуль может добавлять свои собственные преобразователи ресурсов для своих собственных типов, например, MessageModule добавляет свои собственные преобразователи.

Я также использовал его какMap<Integer, WindowProcessor>> в WindowsModule для определения упорядоченного списка WindowProcessor с, который должен применяться один за другим к вновь созданному окну.

Еще раз, это позволяет различным модулям вставлять свой собственный процессорв список, применяемый к каждому окну: ResourceModule использует его для добавления возможности автоматического внедрения ресурсов i18n в окна.

...