-
Notifications
You must be signed in to change notification settings - Fork 24
Toothpick
Недавно перевёл проект на Toothpick. Решил частично перевести документацию и сделать основные заметки что к чему.
Scope - это одна из основных концепций в Toothpick. На самом деле это важно для всего DI в целом, но Toothpick явно выделяет его для разработчиков.
В Toothpick инъекции и создание инстенсов всегда выполняется в рамках скоупа.
Рассмотрим следующий пример
//a class using field and method injections
class Foo {
@Inject Bar bar;
@Inject void setQurtz(Qurtz qurtz) {...}
}
//injecting an object in a scope
Toothpick.inject(new Foo(), scope);
======================
Можно заинжектить в класс сам скоуп. Это удобно когда например Presenter хочет сам закрыть скоуп в onDestroy() на не знает где взять его имя
class MyPresenter @Inject constructor( private val foo : Foo) {
@Inject scope: Scope;
override fun onDestroy() {
super.onDestroy()
Toothpick.closeScope(scope.name)
}
}
bind(IFoo.class).to(Foo.class).instancesInScope()
смысл instancesInScope()
в том, что Экземпляр Foo создасться только в одном скоупе. Если у нас есть два скоупа, S1
и S2
(S1
родитель для S2
) и в скоупе S1 уже был создан экземлпяр Foo, то
Toothpick.inject(new A(), S2)
приведёт к тому, что a.foo
будет тем же экземпляром что и в скоупе S1
. Вобщем это