你应该注入一个接口还是它的实现?
Should you inject an interface or its implementation?
我应该注入一个接口还是它的实现?
我在教程中看到了下面的代码,我想知道为什么注入接口但将其注册为它的实现,而您可以直接注入它的实现?
SIGNINBLOC
@injectable
class SignInBloc extends Bloc<SignInEvent, SignInState> {
final IAuthFacade _authFacade;
SignInBloc(this._authFacade) : super(SignInState.initial());
FIREBASEAUTH
@LazySingleton(as: IAuthFacade)
class FirebaseAuthFacade implements IAuthFacade {
注入配置
gh.lazySingleton<IAuthFacade>(
() => FirebaseAuthFacade(get<FirebaseAuth>(), get<GoogleSignIn>()));
您想将实现细节和对特定实现的依赖性分开。在不同的实现之间切换会更容易,测试时模拟接口也更容易。
例如,您可以将 GetIt 配置为使用不同的接口实现,具体取决于它是否是,例如开发环境,生产环境,测试环境等等,只要改一行,到处都变
我应该注入一个接口还是它的实现?
我在教程中看到了下面的代码,我想知道为什么注入接口但将其注册为它的实现,而您可以直接注入它的实现?
SIGNINBLOC
@injectable
class SignInBloc extends Bloc<SignInEvent, SignInState> {
final IAuthFacade _authFacade;
SignInBloc(this._authFacade) : super(SignInState.initial());
FIREBASEAUTH
@LazySingleton(as: IAuthFacade)
class FirebaseAuthFacade implements IAuthFacade {
注入配置
gh.lazySingleton<IAuthFacade>(
() => FirebaseAuthFacade(get<FirebaseAuth>(), get<GoogleSignIn>()));
您想将实现细节和对特定实现的依赖性分开。在不同的实现之间切换会更容易,测试时模拟接口也更容易。
例如,您可以将 GetIt 配置为使用不同的接口实现,具体取决于它是否是,例如开发环境,生产环境,测试环境等等,只要改一行,到处都变