Flutter 주사제 사용 방법

안녕하세요, 시작하기 전에 이 기사는 제공자, 주입 가능 및 동결을 사용하는 flutter mvvm에 관한 이전 게시물에서 이어집니다.

The Code Project Is Here...

이 기사는 주입 가능한 단계별 구현 방법에 중점을 둘 것입니다...

now.. Injectable 은 다음과 같은 접근 방식으로 종속성을 등록하는 대신 주석을 통해 개체를 종속성 주입에 등록할 수 있게 해주는 종속성 주입 구성 요소입니다.

getIt.registerSingleton<TaskRepositoryImpl>(TaskRepositoryImpl());
getIt.registerLazySingleton<MainScreenViewModel>(() =>MainScreenViewModel());


다음과 같이 TaskRepositoryImplMainScreenViewModel의 각 클래스 선언에 간단히 주석을 추가할 수 있습니다.

@singleton 
class TaskRepositoryImpl implements ITaskRepository{
  final String baseUrl = "run.mocky.io";

  ... 
}

@injectable
class MainScreenViewModel extends BaseViewModel {
  List<TaskModel>? _tasksData;

  final ITaskRepository _taskRepository = getIt<TaskRepositoryImpl>();

  ...
}


이제 WhatToDoApp의 경우
이 이미지를 기억하십니까?
싱글톤 리포지토리와 ViewModel 레이어의 늦은 할당을 원하므로 다음과 같이 TaskRepository를 선언합니다.

@singleton 
class TaskRepositoryImpl implements ITaskRepository{
  final String baseUrl = "run.mocky.io";

  ... 
}


뷰 모델에서 사용해야 할 때 이렇게 사용할 수 있습니다.

@injectable
class MainScreenViewModel extends BaseViewModel {
  List<TaskModel>? _tasksData;

//=== THIS WAY ===//
  final ITaskRepository _taskRepository = getIt<TaskRepositoryImpl>();

  ...
}


쉽죠?

이 스타일을 구현하려면 pubspec.yaml에 몇 가지 항목을 가져와야 합니다.

dependencies:
  flutter:
    sdk: flutter
  injectable: ^1.5.3
  get_it: ^7.2.0
dev_dependencies:
  # add the generator to your dev_dependencies
  injectable_generator: ^1.5.4
  # add build runner if not already added
  build_runner: ^2.2.0

@Injectable 또는 @Singleton 주석으로 클래스를 선언할 때마다 주입 가능한 구성 요소는 실제로 다음과 같이 GetIt에 대한 등록을 포함하는 파일을 생성합니다.

_i1.GetIt $initGetIt(_i1.GetIt get,
    {String? environment, _i2.EnvironmentFilter? environmentFilter}) {
  final gh = _i2.GetItHelper(get, environment, environmentFilter);
  gh.factory<_i3.MainScreenViewModel>(() => _i3.MainScreenViewModel());
  gh.singleton<_i4.TaskRepositoryImpl>(_i4.TaskRepositoryImpl());
  return get;


위와 같이 주입 가능한 파일 콘텐츠 생성을 위해 내 경우에는 Setup.dart라는 새 파일을 만들어야 합니다.
그리고 내용은 이렇습니다..

import 'package:get_it/get_it.dart';
import 'package:injectable/injectable.dart';
import 'package:what_to_do_app/Setup.config.dart';


final getIt = GetIt.instance;  

@InjectableInit(  
  initializerName: r'$initGetIt', // default  
  preferRelativeImports: true, // default  
  asExtension: false, // default  
)  

@InjectableInit(generateForDir: ['test'])  
void configureDependencies() => $initGetIt(getIt);  


위의 Setup.dart를 선언한 후 명령을 실행할 수 있습니다.

flutter packages pub run build_runner build --delete-conflicting-outputs


그런 다음 Setup.config.dart라는 파일을 생성합니다. 그럼 그게 다야 .. 의존성 주입이 이제 당신을 섬길 준비가되었습니다 .. 건배 !!!..

참조:
Injectable
GetIt

좋은 웹페이지 즐겨찾기