플러터 패키지 Get_It을 쉽게 구현하기 위해 존재하는 코드제네레이터 패키지

시작하기

  1. 새로운 dart 파일을 만들고 Getit 인스턴스를 전역 변수로 선언한다.
  2. 최상위 함수를 정의하고 @Injectable 어노테이션을 붙인다. (이름은 자유)
  3. 생성될 파일의 이름을 미리 임포트해준다. 파일의 이름을 넣어주면 된다.
  4. 전역변수.init() 을 정의해준다.
import '<FILE_NAME>.config.dart';
	
final getIt = GetIt.instance;  
  
@InjectableInit(  
  initializerName: 'init', // default  
  preferRelativeImports: true, // default  
  asExtension: true, // default  
)  
void configureDependencies() => getIt.init();

generateForDir 프로퍼티를 통해 특정 폴더 내의 파일만 처리하도록 할 수 있다.

import '<FILE_NAME>.config.dart';
	
@InjectableInit(generateForDir: ['test'])  
void configureDependencies() => getIt.init();
  1. main 함수에서 호출하면 된다.
void main() {  
 configureDependencies();  
 runApp(MyApp());  
}

팩토리 등록하기

해야할 일은 등록하고 싶은 클래스에 @injectable 어노테이션을 붙이고 빌드러너를 돌리면 된다.

@injectable  
class ServiceA {}  
  
@injectable  
class ServiceB {  
    ServiceB(ServiceA serviceA);  
}

생성된 파일은 다음과 같다.

import 'package:get_it/get_it.dart' as _i1;  
  
extension GetItInjectableX on _i1.GetIt {  
  /// initializes the registration of main-scope dependencies inside of [GetIt]  
  Future<_i1.GetIt> init({  
    String? environment,  
    _i2.EnvironmentFilter? environmentFilter,  
  }) async {  
    final gh = _i2.GetItHelper(  
      this,  
      environment,  
      environmentFilter,  
    );  
    gh.factory<ServiceA>(() => ServiceA());  
    gh.factory<ServiceB>(ServiceA(getIt<ServiceA>()));  
    return this;  
  }  
}

싱글턴 등록하기