작성
·
26
·
수정됨
0
di 관련해서 문의 좀 드리겠습니다.
선생님 강의를 듣고 get_it, injectable 패키지를 사용해서 di 를 실 프로젝트에도 적용 하고 있습니다.
여러 singleton 으로 생성 한 여러 usecace들을 한군데 모아 둔 usecases(OrderDetailUseCases) 를 만들어 viewModel 에 주입해서 사용하는 것을 보고 실 프로젝트에도 사용하고 있습니다.
아래 처럼요.
@singleton
class OrderDetailUseCases {
final GetOrderDetailUseCase getDetail;
final GetGoodsForBasketUseCase getGoodsForBasket;
final DeleteOrderUseCase deleteOrder;
OrderDetailUseCases(
this.getDetail,
this.getGoodsForBasket,
this.deleteOrder,
);
}
그런데 나중에 새로운 usecase(AddOrderUseCase) 가 생겨서 위 OrderDetailUseCases 에 추가하면
아래와 같은 오류가 뜹니다.
Bad state: GetIt: Object/factory with type OrderDetailUseCases is not registered inside GetIt.
(Did you accidentally do GetIt sl=GetIt.instance(); instead of GetIt sl=GetIt.instance;
Did you forget to register it?)
기존에 추가 했던 getDetail, getGooodsForBasket usecase 는 잘 사용하고 있습니다
분명 build runner 명령어를 실행 해 줬음에도 불구하구요.
그래서 DeleteOrderUseCase 는 따로 가져와 viewModel 에 전달해주고 있습니다. 아래처럼요.
final orderDetailViewModelProvier =
StateNotifierProvider<OrderDetailViewModel, OrderDetailState>((ref) {
final useCases = getIt<OrderDetailUseCases>();
final deleteOrderUc = getIt<DeleteOrderUseCase>();
return OrderDetailViewModel(
useCases,
deleteOrderUc,
);
});
전 하나의 useCases 에 다 넣고 싶거든요..ㅡ,.ㅡ
이게 패키지가 좀 stable 하지 못한 거 같은 느낌인데 이런 경우를 못 보셨는지요?
경우가 있다면 어떻게 해법이 있는지 들어보고 싶습니다.
답변 2
0
안녕하세요, 인프런 AI 인턴입니다.
의존성 주입에 관련된 문제를 겪으시는 것 같군요. get_it
과 injectable
을 사용할 때, 새로운 UseCase를 추가할 때 문제를 해결하는 방법에 대해 설명드리겠습니다.
코드 확인: OrderDetailUseCases
클래스에 새로운 UseCase를 추가한 후, 해당 컴파일 에러가 발생하셨다면, 먼저 injectable
로 생성된 파일이 올바르게 업데이트 되었는지 확인해보세요. 특히 di_setup_config.dart
와 같은 파일들이 자동으로 생성되지만, 종종 수동으로 삭제 후 다시 생성해야 할 때가 있습니다.
build_runner 사용: flutter pub run build_runner build --delete-conflicting-outputs
명령어를 사용하여 build_runner
를 실행해보세요. 이 명령어는 기존에 충돌이 있는 파일을 삭제하고 다시 생성하므로, 문제가 해결될 수 있습니다.
잘못된 등록 체크: 새로운 UseCase가 잘못 등록되어 있거나 누락된 경우, GetIt
에 올바로 등록되었는지 확인해보세요. OrderDetailUseCases
가 제대로 등록되었다면, 다른 UseCase들과 함께 사용될 수 있을 것입니다.
테스트: 수동으로 GetIt
인스턴스를 초기화하는 부분이 있다면, OrderDetailUseCases
의 인스턴스 생성 시, 모든 의존성이 해결되었는지 확인하는 것도 방법입니다.
비슷한 문의에 대해 도움을 받을 수 있는 기존 답변들을 아래에 소개드립니다:
- Bad state 에러: 갑작스러운 오류와 빌드 문제 해결에 관한 답변
- usecase 질문 드립니다.: UseCase와 DI 관련된 평소의 문제와 해결방법에 대한 답변
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
1.코드 확인: 빌드시 오류가 나진 않습니다. 실행 시 오류가 납니다.
2.build_runner 사용: flutter pub run build_runner build --delete-conflicting-outputs 를 사용해도 동일하게 오류가 납니다.
잘못된 등록 체크: di_setup.config.dart 에는 등록 되어 있습니다.
테스트 : 초기화 부분은 코드는 아래와 같습니다.
inal getIt = GetIt.instance;
@InjectableInit()
Future configureDependencies() async{
await getIt.init();
}
답변 감사합니다.
LazySingleton 으로 바꿔도 봤으나 동일 하더라구요..
순서때문인가 싶어 각 기능을 하는 usecase 를 먼저 빌드 시켜 놓고, 이것들을 모아둔 usecases 를 나중에 빌드해도 동일하더라구요.