Android разница кодеина между ** bind () с ** и ** bind () из ** - PullRequest
0 голосов
/ 11 февраля 2020

При изучении кодеина я часто вижу bind () с и bind () из .

Может кто-нибудь сказать, пожалуйста, в чем разница и почему мы используем его.

Пример:

    bind<Dice>() with provider { RandomDice(0, 5) }
    bind<DataSource>() with singleton { SqliteDS.open("path/to/file") }
    bind() from singleton { RandomDice(6) }
    bind("DnD20") from provider { RandomDice(20) }
    bind() from instance(SqliteDataSource.open("path/to/file"))

Ответы [ 2 ]

0 голосов
/ 16 февраля 2020

bind<Type>() with определяет Type явно . Это важно, например, когда вы привязываете тип интерфейса к его реализации:

bind<Type>() with singleton { TypeImpl() }

Теперь рассмотрим, что вы привязываете очень простой тип, такой как объект данных конфигурации:

bind<Config>() with singleton { Config("my", "config", "values") }

Вы написали Config дважды: один раз в определении привязки и один раз в самой привязке.

Введите bind() from: он не определяет тип, но оставляет выбор связанный тип с самой привязкой. Связанный тип определяется неявно . Например, вы можете написать привязку Config следующим образом:

bind() from singleton { Config("my", "config", "values") }

Обратите внимание, что привязка типа к себе (для чего и нужен bind() from) часто является плохой идеей (это противоречит Io C pattern) и должен использоваться только для очень простых типов, таких как классы данных.

0 голосов
/ 11 февраля 2020

с

с is TypeBinder является привязкой типа (через generi c) с данным тегом и типом (обязательно).

из

от is DirectBinder - это прямое связывание с данным тегом (необязательный тип). Это будет определенный тип в зависимости от типа фабрики.

Разница между каждым связующим является просто способом вывода типа. Таким образом, вы можете использовать более эффективный механизм связывания при объявлении модуля.

...