돼지왕 왕돼지 2022. 1. 27. 17:04
반응형

What is an entry point?

#
Dagger 가 제공하는 objects 를 Dagger 의 inject 를 지원하지 않는 부분에서 접근하는 경계선이다.
Dagger 의 object graph 에 접근하는 방법이라고 말할 수도 있다.

 

When do you need an entry point?

#
non-Dagger lib 이나 Hilt 에 의해 지원되지 않는 android component 등에서 특정 dagger object 에 접근할 때 사용된다.

 

How to use an entry point?

#
entry point 를 만들기 위해서는 binding 하고 싶은 type 에 대한 accessor method 를 interface 로 정의하고, @EntryPoint 와 @InstallIn 을 붙여준다.

@EntryPoint
@InstallIn(SingletonComponent::class)
interface FooBarInterface{
	@Foo fun getBar(): Bar
}

 

#

Entry point 에 접근하기 위해서는 EntryPoints class 를 사용한다.

// EntryPointAccessors 도 사용할 수 있다.
val bar = EntryPoints.get(applicationContext, FooBarInterface::class.java).getBar()

 

Best practice: where to define an entry point interface?

#
Entry point 는 사용처와 정의처 중 어느 곳에 정의되어야 할까?
일반적으로 사용처에서 정의하는 것이 맞다.
사용처에서 더 많은 dependency 를 필요로 하면 해당 interface 에 추가하기 쉽기 때문이다.
만약 정의처에 entry point 가 정의되어 있다면, Foo 를 inject 받아 사용해야 할지, entry point interface 를 통해 접근해야 할지 햇갈릴 수 있다.

 

Visibility

#
entry point method 로 return 되는 모든 type 은 public 이어야 한다.
Dagger code gen 할 때 entry point method 를 구현해야 하기 때문이다.

 

 

참고 : https://dagger.dev/hilt/entry-points

 

반응형