플러터 패키지 Get_It을 쉽게 구현하기 위해 존재하는 코드제네레이터 패키지
@Injectable
어노테이션을 붙인다. (이름은 자유)전역변수.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();
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;
}
}