Service Locator 방식으로 di를 구현해주는 라이브러리이다.
Service Locator 방식이란 필요한 의존성을 한곳에 모아놓고 필요할때 불러오는 방식의 의존성 주입 방식이다.
대략적인 사용방법은 이렇다.
1. GetIt 에 의존성 등록 => register
resiterSingleton, registerFactory 등..
2. GetIt 에 등록된 의존성 가져와서 사용하기
get<T>
Factory
void registerFactory<T>(FactoryFunc<T> func)
T를 구현하는 인스턴스를 반환하는 factory 메서드를 넣어준다. get()를 호출할때마다 새로운 인스턴스를 반환한다.
Singleton & LazySingleton
Abstract base 클래스를 registration type으로 넣는것을 추천하지만 구체적인 클래스를 넣어서 등록 할 수도 있다.
void registerSingleton<T>(T instance)
get()를 호출할때마다 같은 인스턴스를 얻게된다.
void registerLazySingleton<T>(FactoryFunc<T> func)
인스턴스를 생성할때 시간소모가 많이될수도 있으니 인스턴스 생성을 호출시에 수행하도록 할때 사용한다.
처음 get()를 호출할때 인스턴스를 생성하고 이후 호출시에는 같은 instance를 반환한다.
만약 한 타입을 한번 이상 등록하려고 시도하면 debug mode에서의 assertion때문에 실패한다. 만약에 정말로 overwrite해야할 상황이라면 allowReassignment==true
프로퍼티 설정을 하면 된다.
특정한 타입이나 인스턴스가 이미 등록되어있는지 확인하는 방법이 있다.
bool isRegistered<T>({Object instance, String instanceName});
필요하다면 등록된 싱글톤이나 팩토리를 등록해제 할 수 있으며 optional하게 disposingFunction도 추가해서 넣을 수 있다. disposingFunction은 등록을 리셋하기전에 리소스를 해제할경우 사용할 수 있다.
void unregister<T>({Object instance,String instanceName, void Function(T) disposingFunction})
몇몇 경우 LazySingleton을 등록해제하는것은 원치않지만 인스턴스를 초기화시켜서 다음 호출때 새로 생성시키길 원할수도 있다.
void resetLazySingleton<T>({Object instance, String instanceName, void Function(T) disposingFunction})
모든 등록된 타입과 인스턴스를 초기화하고 이는 unit test작성에 도움이 될 수 있다. 만약에 등록할때 dispose 메서드를 제공했다면 dispose = true 옵션을 주었을때 해당 dispose 메서드를 실행하고 dispose 메서드가 async 일수 있기때문에 Future을 반환하므로 await 이 필요하다.
Future<void> reset({bool dispose = true});