[Flutter] GetIt 알아보기 1

sejun·2022년 1월 31일
0

Service Locator 방식으로 di를 구현해주는 라이브러리이다.
Service Locator 방식이란 필요한 의존성을 한곳에 모아놓고 필요할때 불러오는 방식의 의존성 주입 방식이다.

대략적인 사용방법은 이렇다.
1. GetIt 에 의존성 등록 => register
resiterSingleton, registerFactory 등..
2. GetIt 에 등록된 의존성 가져와서 사용하기
get<T>

Register 방법

  1. Factory
    void registerFactory<T>(FactoryFunc<T> func)
    T를 구현하는 인스턴스를 반환하는 factory 메서드를 넣어준다. get()를 호출할때마다 새로운 인스턴스를 반환한다.

  2. Singleton & LazySingleton

    Abstract base 클래스를 registration type으로 넣는것을 추천하지만 구체적인 클래스를 넣어서 등록 할 수도 있다.

    void registerSingleton<T>(T instance)
    get()를 호출할때마다 같은 인스턴스를 얻게된다.

    void registerLazySingleton<T>(FactoryFunc<T> func)
    인스턴스를 생성할때 시간소모가 많이될수도 있으니 인스턴스 생성을 호출시에 수행하도록 할때 사용한다.
    처음 get()를 호출할때 인스턴스를 생성하고 이후 호출시에는 같은 instance를 반환한다.

Overwriting rgistrations - 등록 덮어쓰기?

만약 한 타입을 한번 이상 등록하려고 시도하면 debug mode에서의 assertion때문에 실패한다. 만약에 정말로 overwrite해야할 상황이라면 allowReassignment==true 프로퍼티 설정을 하면 된다.

Testing if a Singleton is already registered

특정한 타입이나 인스턴스가 이미 등록되어있는지 확인하는 방법이 있다.
bool isRegistered<T>({Object instance, String instanceName});

Unregistering Singletons or Factories

필요하다면 등록된 싱글톤이나 팩토리를 등록해제 할 수 있으며 optional하게 disposingFunction도 추가해서 넣을 수 있다. disposingFunction은 등록을 리셋하기전에 리소스를 해제할경우 사용할 수 있다.
void unregister<T>({Object instance,String instanceName, void Function(T) disposingFunction})

Resetting LazySingletons

몇몇 경우 LazySingleton을 등록해제하는것은 원치않지만 인스턴스를 초기화시켜서 다음 호출때 새로 생성시키길 원할수도 있다.
void resetLazySingleton<T>({Object instance, String instanceName, void Function(T) disposingFunction})

Resetting GetIt completely - Getit 완전히 초기화하기

모든 등록된 타입과 인스턴스를 초기화하고 이는 unit test작성에 도움이 될 수 있다. 만약에 등록할때 dispose 메서드를 제공했다면 dispose = true 옵션을 주었을때 해당 dispose 메서드를 실행하고 dispose 메서드가 async 일수 있기때문에 Future을 반환하므로 await 이 필요하다.
Future<void> reset({bool dispose = true});

profile
하잉

0개의 댓글