scoped di with dagger2
TRANSCRIPT
발표목차
• Intro�•Dagger�Overview�•Sample�App�•Objects�in�Scopes�•Custom�Scopes�•Scope을�구현하는�2가지�방법�•실행흐름
Intro
•https://github.com/frogermcs/GithubClient�•Dagger2를�application�/�user�/�activity�scope으로�나눠서�사용하는�방법�
•Subcomponent를�활용�•plus(서브�컴포넌트�생성)�메소드를�통해�명시적으로�life�cycle�관리
Dagger�Overview
• Component,�Module에�제공될�DI�객체들�정의�•사용하는�곳에서�@Inject�어노테이션을�통해�주입받음�
•Activity,�Fragment�등에서는�component에�대한�참조를�얻어서�자기�자신을�전달하여�의존성을�주입받음
Dagger�Component
• component는�아래를�정의�–DI로�제공될�객체들을�생성할�모듈(ApplicationModule)�
– Injection이�일어날�대상(BaseActivity)�–DI로�제공될�객체들(Context,�RetrofitServiceFactory,�UserRepository,�RxBus)
Objects�in�Scopes
•application�scope�–Application,�AnalyticsManager,�Validator,�HeavyExternalLibrary�등��
•user�scope�–User,�RepositoriesManager(User에�의존)��•activity�scope�–XXXActivity,�XXXPresenter,�XXXListAdapter,�LinearLayoutManager,�XXXFactory�등
Custom�Scopes
•@UserScope은�사용자�경험�측면에서는�아무런�차이도�없음�
•하지만�아키텍쳐�측면에서는���–User�인스턴스를�Intent의�파라미터로�전달하지�않고도�제공�
–메소드�파라미터에�user�data를�필요로�하는�클래스들은�user를�생성자�주입을�통해�전달�받을�수�있고,�앱의�런칭때�생성하지�않고,�필요한�시점에�초기화될�수�있음
•1.�최초�app�시작�–Application#onCreate��
!AppComponent�built��
–Main�Activity#onCreate��!SplashActivityComponent�built�
실행�흐름
•activity�scope�component�생성�
–UserComponent의�하위�컴포넌트로�RepositoriesListActivityComponent를�생성하고,�inject를�호출하여�DI
실행�흐름