Dependency injection 依赖注入的合理使用

Dependency injection 依赖注入的合理使用,dependency-injection,inversion-of-control,Dependency Injection,Inversion Of Control,在项目中使用DI/IoC是否有合理的方法?根据DI概念,所有依赖项都应该是可注入的(在我的例子中,我决定使用构造函数进行注入)。问题是我应该在任何地方和所有类中使用DI吗?不要让我的项目(支持)变得更复杂 我将用dart编程语言编写示例代码。例如,在我的项目中,我需要一些应用程序全局实例(如SharedReferences、DatabaseProvider等),一些Bloc/控制器(如AuthBloc、TeachersBloc、StudentsBloc等)。向用户显示数据的小部件(教师页面、学生

在项目中使用DI/IoC是否有合理的方法?根据DI概念,所有依赖项都应该是可注入的(在我的例子中,我决定使用构造函数进行注入)。问题是我应该在任何地方和所有类中使用DI吗?不要让我的项目(支持)变得更复杂

我将用
dart
编程语言编写示例代码。例如,在我的项目中,我需要一些应用程序全局实例(如SharedReferences、DatabaseProvider等),一些Bloc/控制器(如AuthBloc、TeachersBloc、StudentsBloc等)。向用户显示数据的小部件(教师页面、学生页面等)

根据DI,我需要使用此代码(示例):

合同

抽象类AuthProvider{}
抽象类数据库提供程序{}
抽象类BlocProvider{}
具体实例(可替换)

类FirestoreAuthProvider实现AuthProvider{ //实现身份验证功能 } 类FirestoreProvider实现DatabaseProvider{ //实现Firestore功能 } 类AuthBloc实现BlocProvider{ AuthBloc(this.authProvider); 最终授权提供者授权提供者; 无效签名(){ authProvider.signIn();//使用注入。 } } 类StudentsBloc实现BlocProvider{ StudentsBloc(该数据提供者); 最终数据提供者数据提供者; 学生名单(){ return dataProvider.fetchAll();//使用注入 } } DI组件

//匕首容器的简单实现
类AppContainer实现。。。{
DataProvider get DataProvider=>。。。;
AuthProvider获取AuthProvider=>。。。;
//其他注射如下
// ...
静态未来创建([列出模块]){
}
}
GUI

类登录扩展StatefulWidget{
签名(this.auth);
最终AuthBloc auth;
void onSignedIn(){
final component=get();//获取AppComponent(可能来自服务定位器)
final dataProvider=component.dataProvider;//获取全局共享组件
final studentBloc=StudentsBloc(数据提供程序);//注入数据提供程序以准备下一次注入
最后一页=StudentsPage(studentBloc);//注入注入
Navigator.of(context).push(MaterialPageRoute(builder:()=>page));
}
}
类StudentsPage扩展StatefulWidget{
学生群体(这个群体);
最后一批学生;
}

对我来说,这太复杂了。是的,我知道我可以很容易地替换
数据提供者
,也许
学生群体
也可以替换?但是是否有任何边界线证明使用DI是合理的?

这是一个关于如何以及何时使用DI的非常广泛、通用的问题。如果你点击标签,你会发现大量的资源,这些资源肯定会让你更接近你问题的答案。