我在我的应用程序中使用了这个单例:
import 'package:injectable/injectable.dart';
@singleton
final class TMDB {
...
}
字符集
在我的应用程序的几个部分中,我使用了类似于这样的语句:
import '../../../config/initializers/di.dart';
import '../../../config/servers/tmdb.dart';
...
final myUrl = getIt<TMDB>().baseURL;
...
型
正如你所看到的,我有两个 import 语句,getIt<TMDB>()
在我的应用程序中可能会使用多次,然后我想我可以使用一个在di.dart
中声明的变量:
import 'package:get_it/get_it.dart';
import 'package:injectable/injectable.dart';
import 'di.config.dart';
final getIt = GetIt.instance;
@InjectableInit()
void configureDependencies() => getIt.init();
final tmdb = getIt<TMDB>();
型
这将简化前面的语句,但是如果tmdb
表示一个单例并且是一个全局变量(* getIt
也是 *),那么如果 * 我可以像通常的方式直接声明我的单例 *,那么使用get_it/injectable有什么意义呢?
我看不到使用get_it/injectable或类似工具的真实的好处。
2条答案
按热度按时间jei2mxaa1#
get_it不仅仅是一个单例。它还是一个服务定位器,在测试过程中很有用,可以模拟“真实的”单例。它也是编写/测试/调试/记录的代码,而不是使用您自己开发的单例。
w6mmgewl2#
get_it
提供了一种灵活的方式来执行依赖注入,而injectable
构建在它的基础上,添加了代码生成和其他功能,以提高大型项目的生产力和可维护性。