get_it | Dart Package を使っていたがやめた。
// 登録さえすば GetIt.instance.registerSingleton<Logger>(Logger()); // どのクラスでもLoggerを参照できる class HogeBloc { final Logger logger = GetIt.instance.get<Logger>(); }
便利なんだけど次の問題があると思った。
- クラスがなんの型に依存しているのか外からわからない
- GetIt の instance に依存することになり、テストでも依存する
- BuildContext に依存したくないからモデルの中でProviderを利用していないのだけど、代わりにGetItのインスタンスに依存することになる
- FlutterなどのPlatformには依存しないので考えすぎかも
- provider と共存させる場合、どっちになにを置くか両方に必要なのか考える必要がある
今回の場合、providerも使っているので、providerで値を受け取って愚直にDIをすると解決する。Loggerを使う場所で全部自分でinjectしていくのは正直めんどいがそれは別の方法で解決するといいかなと思う。[どうやって?] providerも使っていると外から何に依存しているのかがわからないとは思うのだけど、それ以外のメリットが大きいので採用している。