具有参数的类的Dart依赖项注入

时间:2019-09-17 11:20:45

标签: flutter dart dependency-injection

我正在尝试学习依赖注入,并尝试在Flutter/Dart中使用它。我浏览了get_it库,发现它非常有用。

但是我对特定情况下的依赖注入感到怀疑。

例如,如果我有一个带有此类参数的Dart类:

class MyClass(){
    final String name;

    MyClass({this.name})

    ....
    ....
}

在这样的带有参数的类中,好像我不能使用依赖注入?或至少使用get_it进行以下操作不起作用:

**** service_locator.dart ****

import 'package:get_it/get_it.dart';

GetIt locator = GetIt();

void setupLocator() {
  locator.registerLazySingleton<MyClass>(() => MyClass());
}

这会给=> MyClass()带来错误。...由于它需要参数。

如何进行这种注射?

2 个答案:

答案 0 :(得分:2)

您只需将想要的参数传递给MyClass()。您不必在setUpLocator()内部进行操作。当您知道要传递的参数时,可以在程序中的任何位置注册单例。

例如,如果您需要将用户对象注册为单例,则必须在用户登录并且其所有信息均可用之后再进行操作,以正确地实例化User类。 / p>

答案 1 :(得分:0)

因为它是一个单例,所以您只需在应用程序中的任何位置调用一次seq,它将随处更改。 示例应用程序:

myClass.name = 'name'

另一种方式是,由于它是使用惰性构建器构建的,因此仅在调用第一个class _MyHomePageState extends State<MyHomePage> { @override void initState() { super.initState(); GetIt.instance.registerLazySingleton<MyClass>(()=> MyClass()); // Name from a future get('https://jsonplaceholder.typicode.com/users').then((response){ if(response.statusCode==200) { setState(() { GetIt.I.get<MyClass>().name = jsonDecode(response.body)[0]['name']; }); } }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Title'), ), body: Container( child: Center( child: Text(GetIt.I.get<MyClass>().name), ), ), ); } } class MyClass{ String name = ''; } 之后才构建MyClass对象,以便您可以从静态变量中进行准备和获取。